我正在使用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值,但是如上所述创建了查询,并且有一件事
当我将布尔值更改为布尔值时,它工作正常。任何人都可以帮助我
答案 0 :(得分:2)
boolean
可以有两个值:true或false。它不能为空。因此,如果您没有为布尔属性设置任何值,则其默认值不是null
,而是false
。因此,示例查询查找名为“Balu”的用户,并在数据库中具有newModel值false(“no”)。很明显,如果所有名为Balu的用户都有一个真实的(“是”)newModel,则查询不会返回任何内容。
使用Boolean
代替boolean
可以解决问题,因为布尔字段的默认值为null,并且在创建示例查询时会忽略null属性。
请注意,正如您在问题中所说,查询不会返回null。它返回一个空列表。那是完全不同的。