0

我有一个名为用户的实体:

public class User {
    private String title;
}

我为我的客户提供一个文本字段。当他们输入短语时,我想查找名称中包含给定短语的所有用户实体。

例如,考虑在数据库中有以下标题的条目列表:

[艾伦·史密斯、约翰·凯恩、朱诺·泰勒、小汤姆·卡纳]


jun应该返回 Juno Taylor 和 Tom Caner Junior

应该返回 Alan Smith 、 John Cane 和 Tom Caner Junior

可以通过从数据库加载所有用户条目然后检查标题是否包含给定的短语来做到这一点,但我可能在系统上有很多用户并且加载所有用户似乎不是一个好的选择。

因此,我想在数据库层处理这个问题,最好使用某种休眠标准。请让我知道这是否会产生任何场景,是否有一种经济有效的方法来实现这一目标。

4

1 回答 1

2

您想使用ilike 限制

类似的东西

String value = "jun";
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.ilike("title", value, MatchMode.ANYWHERE);

应该做的伎俩。

我不知道它的效率如何,并且它可能会根据您的数据库而有所不同(尤其是因为它模仿了 Postgres 中实际可用的东西,并且可能在 postgres 方言中使用该运算符)。不过,这可能比在 Java 中获取所有内容并进行过滤要好。

于 2013-10-09T10:35:32.030 回答