为什么org.hibernate.criterion.Example无效?

时间:2014-09-25 16:55:43

标签: hibernate

我正在使用Hibernate,因为我正在使用 org.hibernate.criterion.Example 来获取数据它运行正常。但是,添加布尔属性后我没有得到值。请检查我的代码

@Entity
@Table(name="USER_DETAILS")
public class User extends BaseEntity {

private String name;

private String lname;

private Integer salary;

@Type(type="yes_no")
private boolean newModel; 

@Formula("salary*12")
private Long totalSalary;

}

CriteriaExample.java

 public class CriteriaExample {
   public static void main(String[] args) {
            SessionFactory sessionFactory = new  Configuration().configure().buildSessionFactory();

    Session session = sessionFactory.openSession();
    User user1 = new User();
    user1.setName("Balu");

    Criteria cr = session.createCriteria(User.class);
          cr .add(Example.create(user1));

   List list = cr.list();
    System.out.println(list.isEmpty()+".............."+list.size());
}

现在我得到了null。但是我的数据库中有10条带有Balu名字的记录,当我删除它时

         @Type(type="yes_no")
        private boolean newModel; 

我从database获取记录。请帮助我     这是我的查询日志:

select this_.Id as Id1_1_1_, this_.createDate as createDa2_1_1_, this_.updatedOn as      updatedO3_1_1_, this_.address_Id as address8_1_1_, this_.lname as lname4_1_1_, this_.name as name5_1_1_, this_.newModel as newModel6_1_1_, this_.salary as salary7_1_1_, this_.salary*12 as formula0_1_, address2_.Id as Id1_0_0_, address2_.createDate as createDa2_0_0_, address2_.updatedOn as updatedO3_0_0_, address2_.streetName as streetNa4_0_0_ from USER_DETAILS this_ left outer join Address address2_ on this_.address_Id=address2_.Id where (this_.name=? and this_.newModel=?)

我没有在我的Example对象中设置newModel值,但是如上所述创建了查询,并且有一件事

当我将布尔值更改为布尔值时,它工作正常。任何人都可以帮助我

1 个答案:

答案 0 :(得分:2)

boolean可以有两个值:true或false。它不能为空。因此,如果您没有为布尔属性设置任何值,则其默认值不是null,而是false。因此,示例查询查找名为“Balu”的用户,并在数据库中具有newModel值false(“no”)。很明显,如果所有名为Balu的用户都有一个真实的(“是”)newModel,则查询不会返回任何内容。

使用Boolean代替boolean可以解决问题,因为布尔字段的默认值为null,并且在创建示例查询时会忽略null属性。

请注意,正如您在问题中所说,查询不会返回null。它返回一个空列表。那是完全不同的。