我正在使用Hibernate,因为我使用org.hibernate.criterion.Example来获取运行fine.But的数据,在添加了布尔属性之后,.Please没有得到值,请检查下面的代码
@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());
}现在我得到的是空.But,当我删除以下内容时,我的DataBase中有10条带有Balu名称的记录
@Type(type="yes_no")
private boolean newModel; 我从database.please获得记录帮助我--这是我的查询日志:
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=?)我没有在示例对象中设置newModel值,而是像上面这样创建的查询,还有一件事
当我将布尔值改为布尔值时,它正在工作,fine.any帮助我
发布于 2014-09-25 19:11:22
boolean可以有两个值: true或false。不可能是空的。因此,如果不为布尔属性设置任何值,则其默认值不是null,而是false。因此,示例查询查找名为"Balu“的用户,并在数据库中查找newModel值为false ("no”)。因此,很明显,如果所有名为Balu的用户都有一个真正的(“是”) newModel,查询就不会返回任何内容。
使用Boolean而不是boolean解决了这个问题,因为布尔字段的默认值为null,在创建示例查询时忽略了null属性。
注意,查询不像您在问题中所说的那样返回null。它返回一个空列表。那完全不同了。
https://stackoverflow.com/questions/26044071
复制相似问题