작동 방법에 대한 이해를 방해하는 문제가 있습니다. JPA 쿼리로 저장소 메소드를 테스트하는 Arquillian 테스트가 있습니다.JPA EntityManager.detach()가 여전히 지연 관계를로드합니다.
테스트는 개체를 유지 한 다음 필드에 첫 번째 지속 된 개체가있는 다른 개체를 유지합니다. 그런 다음 저장소 메소드를 호출합니다. 다음으로 테스트는 분리되고 (entitymanager를 지우고, 객체가 em 등에 들어 있지 않은지 검사한다.) 마지막으로 테스트는 관련 객체가 있는지 여부를 확인합니다 (쿼리가 관계를 읽지 않아야하므로).
예상대로 디버거를 볼 때 관련된 객체는 null이지만 assert가 실제로 getRelatedObject-method를 사용할 때 관련 객체를로드합니다.
의사 코드는 (내가) 희망 명확히 : 잘못 내 이해, 관련 객체가 여전히로드해야
FirstObject f = new FirstObject();
em.persist(f);
SecondObject s = new SecondObject();
s.setFirstObject(f);
em.persist(f);
MyRepo r = new MyRepo();
SecondObject result = r.runQuery(f.getId());
em.detach(result); //result.getFirstObject is null
em.clear();
assertIsNull(result.getFirstObject()); //loads first object and test fails
인가? 나는 LazyInit 예외를 예상했다.
내가 이해할 수 없다면, 쿼리가 관련 객체를 채우지 않는 것을 확인하는 방법은 무엇입니까?