Hibernate는 객체의 지연 초기화를 처리하기 위해 javassist 라이브러리를 사용합니다. 나는 다음과 같은 기관을 말해봐 (게터/세터/주석립니다) :Eclipse 디버거는 Hibernate 관리 객체가 지연 초기화되지 않았다는 것을 보여줍니다.
@Entity
public class MainEntity {
private ComponentEntity comp;
}
@Entity
public class ComponentEntity {
private Integer id;
private String name;
}
지금은 다음과 같은 메서드를 호출 :
@Transactional
public void doSomething() {
MainEntity main = this.dao.find(1);
// Case A
main.getComp().getName();
// Case B
String localVariableName = main.getComp().getName();
}
DAO를 메인 검색
의comp
객체가 아직 초기화되지 않습니다 게으른 초기화 때문입니다.
Case A
을 호출하면
comp
개체가 데이터베이스에서 검색되지만 디버거를 기반으로 모든 comp 개체 속성이 null로 표시 될 것으로 예상됩니다.
name
값을 localVariableName
에 저장 한 다음에 만 localVariableName이 null이 아닌 값을 얻는 것을 볼 수 있습니다.
Eclipse에서 내 객체 속성을 null로 표시하는 이유는 무엇입니까?
도움이 될 수도 있습니다. http://www.javalobby.org/java/forums/t20533.html – xyz
진단 정보가 잘못되었습니다. A와 B는 완전히 똑같습니다. 결과를 로컬 변수에 저장할지 여부는 부적합합니다. 따라서 A가 예외를 throw하지 않으면 B가되지 않습니다. 모든 것이 트랜잭션 방식이기 때문에 예외가 없어야합니다. –
실제로 예외는 발생시키지 않지만 사례 A에서 전체 개체의 속성이 null로 초기화됩니다. 사례 B에서는 데이터베이스의 값으로 채워지는 시간입니다. 이 소식을 분명하게 업데이트하겠습니다. –