我有一个名为User的实体:
public class User {
private String title;
}
我向客户提供了一个文本字段。当他们输入一个短语时,我想找到名字中包含给定短语的所有用户实体。
例如,考虑在数据库中包含以下标题的条目列表:
[Alan Smith,John Cane,Juno Taylor,Tom Caner Junior]
jun 应该返回Juno Taylor和Tom Caner Junior
应该归还Alan Smith,John Cane和Tom Caner Junior
可以通过从数据库加载所有用户条目来执行此操作,然后检查标题是否包含给定的短语,但我可能在系统上有许多用户并且加载所有这些用户似乎不是一个好的选择。 / p>
因此我想在数据库层中处理这个问题,最好是使用某种类型的Hibernate Criteria。请告诉我这是否有任何场景,并且有一种经济有效的方法来实现这一目标。
答案 0 :(得分:2)
您想使用ilike restriction。
的内容
String value = "jun";
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.ilike("title", value, MatchMode.ANYWHERE);
应该这样做。
我不知道它的效率如何,它可能会因你的数据库而异(特别是因为它模仿了Postgres中实际可用的东西,并且可能在postgres方言中使用该运算符)。这可能比通过Java获取所有内容和过滤更好。