전체 보기
🍀

조인 안하고 id값 가져오기(AccessType, Proxy)

작성일자
2023/07/25
태그
DIARY_DEVELOP
프로젝트
FIS
책 종류
1 more property

hibernate get join column value → 필드 접근 방식 vs property 접근 방식

의문점)
프로젝트 진행 도중 many to one 관계(a:b = 1:n) 로 묶인 a와 b클래스에 대해 b클래스에서 조인을 하지 않고 a 클래스의 id값만 가져오게 할 수 있는지 궁금했다.
찾아본 결과, 우리가 평소 별다른 의식을 하지 않고 사용하던 b.getA().getId() 이 친구가 키가 된단 걸 확인했다.
@Entity public class A { @Id @GeneratedValue @Column(name="a_id") private Long id; } @Entity public class B { @Id @GeneratedValue @Column(name="b_id") private Long id; @ManyToOne(fetch =FetchType.LAZY) @JoinColumn(name=a_id") private A a; }
Java
복사
해결)
프록시 객체도 자체적으로 id값을 가지고 있다.
file access와 property access 방식 중 property 방식을 사용하면 b.getA().getId() 라고 했을 때 프록시 객체의 id 값을 바로 가져올 수 있다.
참고)
인용
proxies contain the id anyway. To get the id of an A proxy without initializing it, first declare the id to be accessed via property:
Changing access type for the id is necessary because if you use field access, Hibernate does not distinguish getId() method from other ordinary methods (which trigger proxy initialization when invoked)