做“IN”动作使用 Hibernate 进行查询
我有一个字符串中的 ID 列表,并且想要使用 Hibernate 来获取具有这些 ID 的行。 TrackedItem
是一个 Hibernate/JPA 实体(很抱歉,如果我在这里混淆了命名)。
我的代码是:
String idsText = "380, 382, 386";
ArrayList<Long> ids = new ArrayList<Long>();
for (String i : idsText.split(","))
{
ids.add(Long.getLong(i));
}
List<TrackedItem> items = TrackedItem.find("id IN (?)", ids).fetch();
但这失败了: 发生 JPAQueryException :从 models.TrackedItem 执行查询时出错,其中 id IN (?): java.util.ArrayList 无法转换为 java.lang.Long
如何使 IN 部分工作?谢谢。
I have a list of IDs in a String, and want to use Hibernate to get the rows with these IDs. TrackedItem
is a Hibernate/JPA entity (sorry if I'm getting the naming mixed up here).
My code is:
String idsText = "380, 382, 386";
ArrayList<Long> ids = new ArrayList<Long>();
for (String i : idsText.split(","))
{
ids.add(Long.getLong(i));
}
List<TrackedItem> items = TrackedItem.find("id IN (?)", ids).fetch();
But that fails:JPAQueryException occured : Error while executing query from models.TrackedItem where id IN (?): java.util.ArrayList cannot be cast to java.lang.Long
How can I make the IN
part work? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的 JPQL 查询的语法不正确。要么使用(使用位置参数):
要么(使用命名参数):
下面是 JPA 1.0 规范中有关参数的相关部分:
The syntax of your JPQL query is incorrect. Either use (with a positional parameter):
Or (with a named parameter):
Below, the relevant sections of the JPA 1.0 specification about parameters:
如果您不幸使用较旧的非 JPA hibernate,那么这应该适合您:
If you're unlucky enough to be using older non-JPA hibernate, this should work for you:
即使查询正确执行,如果查询参数包含太多值,您也可能会遇到错误。
如果您使用 Hibernate 5.1 或更高版本,此问题的一种可能的解决方案是使用 Session.byMultipleIds()。
有关更多信息,请参阅 https://thoughts-on-java。 org/fetch-multiple-entities-id-hibernate/
Even when your query executes correctly, you may face an error if your query parameter contains too many values.
One possible solution to this problem, if you are using Hibernate 5.1 or newer, is to use Session.byMultipleIds().
For more information, see https://thoughts-on-java.org/fetch-multiple-entities-id-hibernate/