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 에 대한 다른 기사확인 하십시오 .

항상 그렇듯이 기사의 전체 소스 코드는 GitHub에서 사용할 수  있습니다 .

Persistence footer banner