首先,您需要向查询传递2000个以上的id(以您的第一个观点来判断),这本身就是一个警告。也许有更好的方法来解决潜在的问题。
您可以使用方法2并对每个列表进行排序,然后在应用程序中执行mergesort。这将需要额外的代码,但可能(假设实际查询速度相对较快)比方法3更好。
对于#3,处理临时表有2大缺点:
- 虽然Hibernate确实支持它们(看一下
Table.sqlTemporaryTableCreateString
方法,它在Dialect
类中使用了一堆支持方法),但它们在内部使用,并且需要您额外的编码才能从应用程序访问。 - 更重要的是,使用临时表将迫使您将查询写为本机SQL(因为它不会被映射)。如果您使用的是Criteria API,则必须
sqlRestriction
与子查询一起使用 。



