2011-11-04 5 views
3

계층 구조는 다음과 같습니다. 상위 개체는 하위 개체와 연결됩니다. 새 Parent 개체를 만들고이 개체를 이미 데이터베이스에 저장되어있는 Child 개체와 연결하고 Parent 개체를 데이터베이스에 저장하려고합니다. 이를 수행하는 한 가지 방법은 하위를 미리로드하고 부모와 연관시키는 것입니다. 그러나 새 Child 객체를 만들고 해당 ID를 설정 한 다음 Parent와 연결할 수 있으므로 Parent를 저장할 때 최대 절전 모드가 자동으로 해당 Child를 찾고 누락 된 Child 필드를 채우게됩니다.이 필드는 처음에는 null로 설정되어 있습니까?최대 절전 연결 저장

감사합니다.

답변

5

아니요. 데이터베이스에서 하위 항목을 가져와야합니다. 그러나 session.get 대신 session.load을 사용하면 SQL 쿼리를 실행하지 않고도 프록시를 실제 영구 객체로 초기화합니다. 물론 엔티티가 실제로 데이터베이스에 존재하지 않는 경우 플러시 시간 (또는 트랜잭션의 나중에 코드의 다른 부분에서 엔티티를 가져 오는 경우)에서 예외가 발생합니다.

Child child = session.load(Child.class, idOfChild); // no SQL query here 
Parent p = new Parent(); 
p.setChild(child); 
session.persist(p); 
관련 문제