2013-05-29 5 views
0

나는 inheriatnce 유형 SINGLE_TABLE와 개체 계층 구조를 가지고 :최대 절전 모드에서 상속 항목 SINGLE_TABLE에 엔터티 속성을 매핑하는 방법은 무엇입니까?

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorValue("junioruser") 
@DiscriminatorColumn(name = "dtype", discriminatorType = DiscriminatorType.STRING) 
......... 
public class JuniorUser { 

문제는 다음과 같이 대답 엔티티에 속성으로을이 JuniorUser 엔티티를 매핑하고 모든 서브 클래스하는 방법입니다 :

@Entity 
public class Answer { 
private JuniorUser user; 
.......................... 

이 인 경우 가능하지 않다 어떻게 대답 엔티티의 '사용자'속성에 매핑 할 수 있습니까? 최대 절전 모드 4를 사용하여 JuniorUser 또는 JuniorUser 자체의 올바른 서브 클래스가 있습니까?

는 업데이트 : 답변과 연관된 사용자 검색이 작업을 수행 : 관련 사용자의 정식 이름을 물어

Answer answer = sessionFactory.getCurrentSession().get(entityClass, id); 

answer.getUser().getClass().getCanonicalName(); 

com.javahelp.domain.impl.JuniorUser_$$_javassist_3
다음 프로퍼티의 값을 요구 제공 dtype은 'junioruser'를 제공합니다. 마지막으로이 사용자의 다른 모든 속성은 user_id 속성을 포함하여 null입니다.
나 자신이 검색된 답변에 대해 'expertuser'로 dtype이있는 관련 사용자가 있습니다.

감사합니다!

+1

ManyToOne (사용자가 여러 답을 가지고 있다고 가정). 뭐가 문제 야? 왜 당신은 상속 관계가 매핑되는 방법을 변경한다고 생각합니까? –

+0

죄송합니다. 정말 ExpertUser를 검색합니다! 문제는 내가 사용자를 위해 FetchType.LAZY를 지정하고 리플렉션으로 사용자 값을 얻으려고했다는 것입니다. 최대 절전 모드로 아직 사용자 속성이 초기화되지 않았습니다! –

답변

0

여기에서 가장 큰 문제는 가져 오기 유형 오해입니다.

FetchType.EAGER는 부모가 한 선택에서로드 될 때 데이터베이스에서 관련 엔티티 속성을로드하는 것을 의미합니다. 관련 엔티티의 새 인스턴스를 만들고 데이터베이스에서 가져온 모든 값을 해당 속성에 할당합니다. 관련 엔티티 자체는 또한 상위 엔티티의 특성에 할당됩니다.

FetchType.LAZY는 해당 관련 엔터티의 데이터베이스 만들기 프록시에서 부모를로드하고 부모 엔터티 속성에 프록시를 할당하는 경우를 의미합니다. 게으른로드 된 관련 엔티티의 값을 얻으려면 프록시의 메소드를 호출해야합니다.