我正在使用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。它返回一个空列表。这完全不同。