JVM/JPA

@Access

kyoulho 2023. 6. 11. 21:42

JPA가 엔티티 데이터에 접근하는 방식을 지정한다.

설정하지 않으면 @Id의 위치를 기준으로 접근 방식이 설정된다.

 

필드 접근 (권장)

AccessType.FIELD로 지정한다. 필드에 직접 접근한다. 필드 접근 권한이 private이어도 접근할 수 있다.

@Entity
@Access(AccessType.FIELD)
public class Member {
    @Id
    private String id;
}

 

@Id가 필드에 있으므로 @Access(AccessType.FIELD)로 설정한 것과 같다. 따라서 @Access는 생략해도 된다.

 

 

프로퍼티 접근

AccessType.PROPERTY로 지정한다. Getter를 사용한다.

@Entity
@Access(AccessType.PROPERTY)
public class Member {
    
    private String id;
    
    @Id
    public String getId() {
        return id;
    }
}

@Id가 프로퍼티에 있으므로 @Access(AccessType.PROPERTY)로 설정한 것과 같다. 따라서 @Access는 생략해도 된다.

 

 

필드, 프로퍼티 접근 함께 사용

@Entity
public class Member {
    @Id
    private String id;

    @Transient
    private String firstName;
    @Transient
    private String lastName;

    @Access(AccessType.PROPERTY)
    public String getFullName() {
        return firstName + lastName;
    }
    
    public void setFullName(String fullName) {
        ... 생략
    }
}

회원 테이블의 FULLNAME 컬럼에 firstName + lastName의 결과가 저장된다.

 

 

728x90

'JVM > JPA' 카테고리의 다른 글

@OneToMany  (0) 2023.06.12
@ManyToOne, @JoinColumn  (0) 2023.06.12
@Transient  (0) 2023.06.11
@Lob  (0) 2023.06.11
@Temporal  (0) 2023.06.11