0

我无法从数据库中检索所需的记录,我的课程如下,我需要知道哪些用户的购物篮不活跃。

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();

上面的代码生成以下查询(我不确定为什么它在此查询中包含 Prof 以及为什么它不显示具有非活动篮子的用户)

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>
4

2 回答 2

1

我对此表示怀疑Restrictions.eq("basket.active", null)。据说是4.2.0.CR1根据这个修复的,对我来说这意味着应该没问题,4.2.1.Final但从查询中我可以看到它正在生成where basketl1_.active=?这是错误的。尝试Restrictions.isNull("basket.active")

于 2013-10-02T03:22:47.373 回答
1

因为NULL它应该是

Restrictions.isNull("basket.active")
于 2013-10-02T03:19:09.630 回答