给定下表,其中wildcard是字符串:

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'


但是我确定我可以做得更好?

我该如何使用休眠Criterion

最佳答案

在Oracle / PostgresQL中,您可以使用:

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


我不确定||字符串连接是否为Ansi SQL标准(我认为不是),因此在其他数据库中,您需要将其替换为该数据库的连接函数或运算符。

10-04 11:39