2014-09-25 15 views
1

我使用Hibernate,在我使用org.hibernate.criterion.Example來獲取數據它的工作fine.But,添加布爾屬性,我沒有得到的值。請檢查下面爲什麼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()); 
} 

現在我得到空。但我有10條記錄與斯巴魯的名字在我的數據庫,當我刪除此

  @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,並向設定值,還有一件事

當我將布爾值更改爲布爾值時,它工作正常。任何人都可以幫助我

+1

hibernate在日誌中生成的查詢是什麼? – Chaitanya 2014-09-25 16:59:32

回答

2

A boolean可以有兩個值:true或false。它不能爲空。所以,如果你沒有爲布爾屬性設置任何值,它的默認值不是null,它是false。因此,示例查詢會查找名爲「Balu」的用戶,並且newModel值爲false(數據庫中的「no」)。很明顯,如果所有名爲Balu的用戶都有一個真的(「是」)newModel,查詢就不會返回任何內容。

使用Boolean而不是boolean可解決此問題,因爲布爾字段的默認值爲空,並且在創建示例查詢時會忽略空屬性。

請注意,查詢不會像您在問題中所說的那樣返回null。它返回一個空列表。這完全不同。

+0

感謝您的回覆,我收到了很多答案,謝謝 – Bhanuprasad 2014-09-26 06:45:09