玩!框架 - 使用IN运行JPA查询值范围

时间:2011-05-30 05:45:15

标签: jpa playframework

我一直在尝试使用IN从数据库中获取值。我意识到我需要编写像

这样的JPA查询
o.country IN (’UK’, ’US’, ’France’)  

所以我试着写查询

List result = Playlist.find("id in ?", values).fetch();  

其中values=set of integers

但无法在运行时编译

java.lang.ClassCastException: java.util.HashSet cannot be cast to java.lang.Integer   

我该如何解决这个问题?

已修复

我也在google网上发布了这个,并得到了似乎有用的答案

List<Integer> countries = (list of integers for ’UK’, ’US’, ’France’) 
List result = Playlist.find("id in (:countries)").bind("countries", 
countries).fetch(); 

1 个答案:

答案 0 :(得分:2)

我对你的问题的某些方面并不完全确定:

  • 我对播放列表及其方法一无所知。
  • 你是什么意思“但它无法在运行时编译”?它是否无法编译或无法运行?

无论如何,这是我的代码库中的一个(修改过的,因此未经检查的)示例:

在JPA实体类中: @NamedQuery(name = "findFoo", query = "select f from Foo f where f.state in :stateInList")

查询的使用方式如下:

final Query query = this.entityManager.createNamedQuery("findFoo");
final Set<FooState> states = new HashSet<FooState>(Arrays.asList(FooState.STARTED, FooState.FAILED));
query.setParameter("stateInList", states);
final List<Foo> retval = query.getResultList();
return retval;

HTH