1. 소개
ORM(Object-Relational Mapping) 프레임워크를 사용하여 Java 개체를 데이터베이스 레코드에 유지할 때 특정 필드를 무시하고 싶은 경우가 많습니다. 프레임워크가 JPA(Java Persistence API)와 호환되는 경우 이러한 필드에 @Transient 어노테이션을 추가할 수 있습니다 .
이 사용방법(예제)에서는 @Transient 어노테이션 의 올바른 사용법을 보여줍니다 . 또한 Java에 내장된 임시 키워드 와의 관계도 살펴보겠습니다 .
2. @Transient 어노테이션 대 일시적 키워드
일반적으로 @Transient 어노테이션과 Java의 내장 임시 키워드 사이의 관계에 대해 약간의 혼동이 있습니다 . 과도 키워드는 주로 동안 필드 무시위한 것입니다 자바 객체 직렬화 ,하지만 그것도 JPA 프레임 워크를 사용하는 경우 지속되는 이러한 필드를 방지 할 수 있습니다.
즉, transient 키워드는 데이터베이스에 저장할 때 @Transient 어노테이션 과 같은 효과 를 냅니다. 그러나 @Transient 어노테이션은 Java 객체 직렬화에 영향을 미치지 않습니다.
3. JPA @Transient 예제
데이터베이스의 Users 테이블에 매핑 되는 JPA 엔터티인 User 클래스 가 있다고 가정해 보겠습니다 . 사용자가 로그인하면 Users 테이블에서 레코드를 검색한 다음 나중에 User 엔터티 에 몇 가지 추가 필드를 설정 합니다. 이러한 추가 필드는 이러한 값을 저장하지 않기 때문에 사용자 테이블의 열에 해당하지 않습니다.
예를 들어 사용자가 현재 세션에 로그인한 시간을 나타내는 사용자 엔터티 에 타임스탬프를 설정합니다 .
@Entity
@Table(name = "Users")
public class User {
@Id
private Integer id;
private String email;
private String password;
@Transient
private Date loginTime;
// getters and setters
}
Hibernate와 같은 JPA 공급자를 사용하여 이 User 객체를 데이터베이스에 저장할 때 공급자는 @Transient 어노테이션으로 인해 loginTime 필드를 무시합니다 .
이 User 객체를 직렬화하여 시스템의 다른 서비스에 전달하면 loginTime 필드가 직렬화에 포함됩니다. 이 필드를 포함하고 싶지 않다면 @Transient 어노테이션을 transient 키워드로 대신할 수 있습니다.
@Entity
@Table(name = "Users")
public class User implements Serializable {
@Id
private Integer id;
private String email;
private String password;
private transient Date loginTime;
//getters and setters
}
이제 데이터베이스 지속성 및 개체 직렬화 중에 loginTime 필드가 무시됩니다.
4. 결론
이 기사에서는 일반적인 사용 사례에서 JPA @Transient 어노테이션 을 올바르게 사용하는 방법을 조사했습니다 . 지속성에 대해 자세히 알아보려면 JPA 에 대한 다른 기사 를 확인 하십시오 .