우리가 ManyToOne 주석 필드의 getter 메소드를 호출 할 때 지속성은 EclipseLink 등의 제공자 또는
uses find() or getReference()
엔티티를로드하는 데 최대 절전 모드?
Hibernate는 뒤에서 find 또는 getRefernce를 호출하지 않습니다. 이러한 메소드는 클라이언트가 엔티티 또는 프록시를 찾기 위해 사용됩니다.
@ManyToOne
연관이있는 경우, Hibernate는 뒤에서 JPA @ManyToOne
이 외래 키일 뿐이므로 상위 엔티티를 가져 오는 방법을 이미 알고 있습니다.
그러나 하위 엔티티를로드 한 원본 ResultSet
에도 FK 값이 포함되어 있기 때문에 Hibernate는 연관을 탐색 할 때 이미 FK 값을 알고 있습니다. 아무 것도 발견되지 않으면
- 첫 번째 레벨 캐시는
- 을 필요로하는 개체를 검색합니다 다음과 같이로드 사이클이기 때문에 최대 절전 모드가 DB로 이동하는
그러나 의무적이 아니다 1 차 레벨 캐시에서 Hibernate는 2 차 레벨 캐시에서 그것을 찾는다.
- 엔티티가 여전히 발견되지 않으면 연관은 LAZY 여야하므로 2 차 조회가 발행됩니다.
따라서 실제 존재하지 않는 부모 레코드를 참조 할 수 없기 때문에 FK를 탐색 할 때 EntityNotFoundException
을 사용할 필요가 없습니다. FK를 사용하지 않았고 데이터베이스에 이러한 불일치가 있다면 Hibernate는 실제로 예외를 던질 것입니다. 그러나 그것은 데이터 모델링 디자인이 손상되었다고 말할 것입니다.
답변을 주셔서 감사합니다. 내 프로젝트 중 하나에서 EclipseLink를 사용하고 있으며 FK 비용을 적용하지 않았으며 ManyToOne 제휴에서 getMyEntity를 호출 할 때 단순히 null 값을 얻습니다. JPA 사양과 일관성이 있습니까? – GionJh
EclipseLink 팀에 문의하십시오. 나는 JPA가 존재하지 않는 협회를 탐색하기위한 표준 결과가 무엇인지 명시하고 있다고 생각하지 않습니다. –
블라드에게 고마워! – GionJh