为什么org.hibernate.criter.Example不起作用



我正在使用Hibernate,因为我使用的是org.Hibernate.criteria。示例来获取数据。它运行良好。但是,添加布尔属性后,我没有得到值。请检查下面的代码

@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;
}

标准示例.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());
}

现在我变空了。但我的数据库中有10条巴鲁名字的记录,当我删除这个时

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

我从数据库中得到了记录。请帮帮我这是我的查询日志:

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值,而是像上面一样创建了查询,还有一件事

当我将布尔值更改为布尔值时,它运行良好。任何人都可以帮助我

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

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

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

最新更新