2012-04-15 118 views
0

工作我的裝備:從http://code.google.com/p/hibernate-sqlite/休眠條件不SQLite的

我的實體類是簡單

  • 的Hibernate 3.6.9

  • 休眠SQLite的話,

    @Entity 
    @Table(name = "RegistrationRequests") 
    public class RegistrationRequest { 
    
        @Id 
        @GeneratedValue 
        Integer id; 
        String uuid; 
        ... getters and setters ... 
    } 
    

    將uuid分配給UUID.randomUUID()。toString(),並正確保留在數據庫中。 現在,問題是當我嘗試使用Hibernate Criteria從數據庫檢索存儲的請求時。

    Criteria criteria = sessionFactory.getCurrentSession().createCriteria(RegistrationRequest.class); 
        criteria.add(Restrictions.eq("uuid", '\'' + uuid + '\'')); 
        List requests = criteria.list(); 
    

    總是產生一個空的結果,但是,如果我執行生成的SQL,

    select 
         this_.id as id2_0_, 
         this_.created as created2_0_, 
         this_.email as email2_0_, 
         this_.isVerified as isVerified2_0_, 
         this_.name as name2_0_, 
         this_.password as password2_0_, 
         this_.surname as surname2_0_, 
         this_.uuid as uuid2_0_ 
        from 
         RegistrationRequests this_ 
        where 
         this_.uuid='ced61d13-f5a7-4c7e-a047-dd6f066d8e67' 
    

    結果是正確的(即一個記錄從數據庫中選擇)。

    我有點爲難,試圖沒有結果一切......

+1

的' '\' '+ UUID + '\'''看起來很奇怪。如果你使用uuid而沒有'arround uuid?會發生什麼? – andih 2012-04-15 19:44:58

回答

1

你沒有我所知,關於Hibernate API(我使用NHibernate的)來設置自己的where子句值遠,因此,當您將你的where子句的值設置爲'myValue',實際上你正在搜索字符串以匹配'myValue',因爲你需要搜索myValue。

更改爲這應該希望得到它的工作:

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(RegistrationRequest.class); 
    criteria.add(Restrictions.eq("uuid", uuid)); 
    List requests = criteria.list(); 
+0

這並沒有多大幫助,因爲SQLite無法處理帶連字符的查詢,所以我需要引用該參數。沒有引號SQLite抱怨: 錯誤:無法識別的令牌:「4c7e」 – 2012-04-15 20:00:11

+0

當您有上述條件查詢時,生成的查詢是什麼? – Baz1nga 2012-04-15 20:30:32

+0

查詢與我的文章完全一樣,只有在uuid附近沒有引號。當我嘗試執行此聲明時,我得到SQLIte抱怨無法識別的令牌。 我認爲這可能是一個SQLite特定的問題... – 2012-04-17 05:56:40