2017-03-08 8 views
1

우리는 JPA + 최대 절전 모드를 사용하고 있습니다. 나는 게으른로드 된 many-to-one 매핑을 가지고있다.JPA + Hibernate 강제로 JPA가 지연로드에서 프록시를 사용하지 않음

서비스에서 getter 메서드를 호출하여 다 대일 개체를 시작합니다. 프록시는 실제 VO 객체가 아니라 상위 VO에 할당됩니다.

내 질문은 JPA에서 프록시 전략을 사용하지 못하도록하는 방법이 있습니까? 여기 내 제한은 최대 절전 모드 객체 또는 @LazytoOne 등의 annotaions을 사용할 수 없다는 것입니다.

감사합니다.

답변

2

당신이 Hibernate가 게으른 릴레이션을 보장해야한다는 사실 때문에 프록시 객체를 거기에서 사용하는 것을 막을 수는 없다.

  1. 트리거 초기화 Hibernate.initialize(parent.getChild()) :

    은 여러 선택 사항이 있습니다. 이것이 최선의 방법은 아니며 활성 트랜잭션이 필요합니다.

  2. 엔티티 자체를 페치 할 때 관계를 가져옵니다. 이는 조인 가져 오기를 사용하여 수행 할 수 있습니다. JPQL/HQL/Criteria API는이를 수행 할 수 있습니다.
  3. 필요한 데이터 만 포함하는 읽기 전용 투영을 사용하십시오. 이 경우에는 Spring Data JPA과 같은 기능을 사용할 수 있습니다.

옵션 2 또는 3을 사용하는 것이 좋습니다. 가장 효과적인 방법은 옵션 2 또는 3을 사용하는 것이 좋습니다.

게으른 로딩에 대한 더 자세한 정보는 here입니다.