2014-09-26 93 views
4

直觀地說,就是我想要做的是這樣的:使用Hibernate的Criteria API,我可以使用concat和ilike限制嗎?

Restrictions.ilike("concat(user.firstName, ' ', user.lastName)", 
    text.toLowerCase() + "%") 

但是,我知道,這是行不通的,因爲concat(user.firstName, ' ', user.lastName)是不是休眠理解的屬性,儘管這是我會作爲where子句的一部分,在常規SQL語句中鍵入。

有沒有什麼簡單的方法可以讓Hibernate Criteria API進行限制,還是我不得不退而求其次的HSQL?

感謝

回答

4

一種解決方案是在User類中定義fullName屬性。

@Formula(value="first_name || ' ' || last_name") 
private String fullName; 

,然後使用該申請在Criteria

criteria.add(Restrictions.ilike("fullName", text.toLowerCase() + "%")); 
+0

該解決方案的工作。對於那些一起使用hsqldb和mysql的人,你可能想要使用這個公式:'ltrim(concat(concat(first_name,'',last_name))' – egervari 2014-09-27 01:20:41

0

我在SQL有點軟,因此語句可能不是100%準確。

顯然,這不是ilike但如果你想使用SQL,爲什麼不使用sqlRestriction而不是參數?

Restrictions.sqlRestriction("select * from user where concat(user.firstName, ' ', user.lastName) like ?", text.toLowerCase() + "%", StandardBasicTypes.STRING); 

我認爲我們的目標是能夠使便攜式限制,在這種情況下,這可以爲你的企圖ILIKE子。

相關問題