使用休眠“Restrictions.in”时的性能问题

时间:2021-04-06 21:14:23

标签: java hibernate hibernate-criteria criteria-api

我在 Oracle 中有一个表:UserDetail[id, name, country]。问题陈述是使用 Hibernate 获取所有“名称”来自给定输入列表的“UserDetail”实体。最明显的解决方案是使用休眠条件 api 中的“Restrictions.in”:

//Session Construction code
List<String> usernames = getUserNames();   
Criteria criteria = session.createCriteria(UserDetail.class);
criteria.add(Restrictions.in("name", usernames)); //usernames -> List of usernames 
List<UserDetail> users = criteria.list();

问题是,如果列表(用户名)的大小为 10k 并且数据库中存在的用户数量大约为 1000 万左右,是否会出现任何性能问题。想知道性能问题是什么,以及使用这种过滤器获取数据集的替代方法是什么。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果这个用户名列表是通过某种查询确定的,我建议您将该查询作为子查询嵌入,因为这通常会更好地执行。如果列表是由用户提供的,那么除了您已有的之外,您无能为力。