2011-10-10 2 views
2

나는 DTO의 다음 구조가 객체가최대 절전 모드 기준

MainDTO.disabled = 거짓,

MainDTO.root! = null,

MainDTO.root.disabled = false,

MainDTO.child.disabled = 거짓,

MainDTO.child.info! = null의

,

MainDTO.child.info.disabled = 여기

, 내가 작성한 코드는 false하지만, InfoDTO의 일부 InfoId에 머물렀다.

Criteria rootCriteria = getSession().createCriteria(
     MainDTO.class); 

// check that root is enabled 
rootCriteria.createCriteria("root", "root").add(
    Restrictions.eq("disabled", false)); 

// check that child is enabled 
Criteria childCriteria = rootCriteria 
    .createCriteria("child", "child") 
    .add(Restrictions.eq("disabled", false)) 
    .add(Restrictions.isNotNull("info")); 

// check that info is enabled 
childCriteria 
    .createCriteria("info", "info") 
    .add(Restrictions.eq("disabled", false)); 

ProjectionList rootProjection = Projections.projectionList() 
    .add(Projections.property("mainId")) 
    .add(Projections.property("name")) 
    .add(Projections.property("child.info")); //HOW TO SELECT ONLY ID?? 
rootCriteria.setProjection(rootProjection); 
rootCriteria.add(Restrictions.eq("disabled", false)) 
    .add(Restrictions.isNotNull("root")) 
    .add(Restrictions.isNotNull("child")); 

고마워!

답변

0

우선 엔티티 DTO를 호출하는 것은 정말로 혼란 스럽습니다.

이제 귀하의 질문에 대해, 당신은

당신이 내부를하고있는 주어진 또한
ProjectionList rootProjection = 
    Projections.projectionList() 
       .add(Projections.property("mainId")) 
       .add(Projections.property("name")) 
       .add(Projections.property("info.infoId")); 

는, 루트와 자식에 가입 당신이 당신의 예측에 정의 된 별칭을 사용해야합니다, 마지막 두 제한이 필요하지 않습니다

: 내부 조인은 이미 null이 아닌지 확인합니다.

+0

고마워요! 어쩌면 당신이 다른 문제를 도와 줄 수 있습니다.이 rootCriteria.list()는 다음 구조를 반환합니다 : Object [Object [3]] Object [3]이 내 맵으로 변환 할 것을 기대했을 때. 어쩌면 그룹 진술을 추가해야할까요? – ninja

+0

criteria.list() 메서드는 목록을 반환합니다. 목록의 각 요소는 쿼리에 의해 반환 된 행이며, Object 배열로 표시됩니다. 각 행에는 3 개의 열이 있습니다. 따라서 criteria.list() 메서드는 List 을 반환해야하며 각 Object []는 3 개의 요소를가집니다. –

+0

이제 List 을 반환합니다. 여기서 Object []는 자신의 Object [3]을 포함합니다. (내 테스트에서) 목록 결과 = rootCriteria.list(); List 크기가 31232이고 List의 각 Object [39224]에 Object [3]이 있습니다. 그것은 내가 39224 * 31232 Object를 얻었 음을 의미합니다. [3] – ninja