2013-10-02 5 views
0

데이터베이스에서 필요한 레코드를 검색 할 수 없다. 클래스는 다음과 같다. 어떤 사용자가 비활성 바구니를 가지고 있는지를 알아야한다. 코드 위Hibernate가 필요한 레코드를 가져 오지 않는다.

Class Person { 

} 

Class User extends Person{ 
    private Set<Basket> basketlist; 
} 

Class Prof extends User { 

} 

Class Basket{ 
    private String active; 
} 


      Criteria cre = session.createCriteria(User.class, "user") 
        .createAlias("user.basketlist", "basket"); 
      ProjectionList pl = Projections.projectionList(); 
      pl.add(Projections.property("user.id").as("id")); 
      cre.setProjection(pl); 
      cre.add(Restrictions.eq("basket.active", null)); 
      IDs = cre.list(); 

는 다음 쿼리를 (내가이 쿼리에서 교수를 포함하는 이유는 확실하지 않다 왜 비활성 바구니를 사용자에게 표시되지 않습니다) 내 최대 절전 모드

을의

select this_.id as y0_ from User this_ inner join Person this_1_ on 
this_.id=this_1_.id left outer join Prof this_2_ on this_.id=this_2_.id inner join 
User_basketlist basketl3_ on this_.id=basketl3_.User_id inner join basketlist 
basketl1_ on basketl3_.basketlist_id=basketl1_.id where basketl1_.active=? 

버전 생성

<dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.2.1.Final</version> 
      <type>jar</type> 
     </dependency> 
+0

어떤 버전의 최대 절전 모드를 사용하고 있습니까? –

+0

질문이 업데이트되었습니다. 4.2.1. 최종 – J888

답변

1

NULL을 위해 그것은해야

Restrictions.isNull("basket.active") 
1

나는 Restrictions.eq("basket.active", null)에 대해 의심 스럽습니다. 그것은 4.2.1.Final에 내게 좋은 것이라는 것을 의미하는 에 따라 4.2.0.CR1에 고정되어 있다고 말 해졌습니다.하지만 쿼리에서 나는 그것이 where basketl1_.active=?을 생성하고 있다는 것을 알 수 있습니다. 시도해보십시오 Restrictions.isNull("basket.active")

관련 문제