2014-07-23 70 views
2

的列如下表,其中wildcard是一個String:匹配的輸入字段對通配符

ID wildcard 
1  foo 
2  fo 
3  f 

我希望能夠建立一個Hibernate Criterion針對匹配輸入字段匹配任何wildcard的領域。

下面的例子應該澄清我的意思是 「匹配」:

與 「foobar的」 查詢應該因爲匹配這些行的所有3:

foo%fo%f%都包括foobar的

換句話說,我希望查詢返回輸入值以行的wildcard列開始的位置。

我這樣做的一種方法是設置一個or標準術語,我檢查wildcard是否等於foobar中的每一條。

例子:

select * from table where wildcard = 'f' or wildcard = 'fo' or 
     wildcard = 'foo' or wildcard = 'foob' or 
      wildcard = 'fooba' or wildcard = 'foobar' 

但我敢肯定,我可以做的更好?

我該如何用Hibernate Criterion做到這一點?

+0

您正在使用哪個數據庫?您可能需要此數據庫特定的代碼 –

+0

我想在Hibernate中實現此目的,而不是特定於DB的代碼。你能說更多的代碼嗎?我不確定你在討論什麼 - 謝謝。 –

回答

2

在Oracle/PostgreSQL裏你可以使用:

select * from table where 'foobar' like wildcard || '%' 

我不知道,如果||字符串連接是ANSI SQL標準(我認爲不會),所以在其他數據庫,你需要用連接來取代它該數據庫的功能或操作員。

+0

謝謝,Erwin,該查詢爲我工作。我+1了,但我仍然試圖找出如何在Hibernate中做到這一點。 –

+0

我會把它作爲註釋,因爲我無法測試它,但我認爲這應該工作:'Restrictions.sqlRestriction(「'foobar'like like {alias} .wildcard ||'%'」);'' (認爲​​應該有更好的方法,但我不確定Criterion API能夠處理複雜的表達式如串聯) –