2012-03-01 13 views
3

Playでクエリを実行する方法! IN状態のフレームワーク?IN条件のPlay Frameworkクエリ

 String arrString[] = category.split(","); 
     List<String> listString = new ArrayList<String>(); 
     for(int i=0; i<arrString.length; i++) { 
      listString.add(arrString[i]); 
     } 

     posts = Post.find(     
      "(category_id in (: cat)) AND (gender like?) AND (name like? OR description like?) AND isComplete is? " + 
      "order by created_date desc", gender, search, search, true 
     ).bind("cat", listString).from(0).fetch(50); 

私は単純に(使用することはできません。..

IllegalArgumentException occured : org.hibernate.hql.ast.QuerySyntaxException: cannot define positional parameter after any named parameters have been defined [from models.Post where (category_id in (:cat)) AND (gender like ?) AND (name like ? OR description like ?) AND isComplete is ? order by created_date desc] 

と、これは私のコードは次のとおりです。私は、このリンクPlay Framework - How to Query a Model using 'IN'?からソリューションをたどってきましたが、私は違法Arugment例外エラーを取得しますか? )INの構文です。次のようになります:

 posts = Post.find(     
      "(category_id in (?)) AND (gender like?) AND (name like? OR description like?) AND isComplete is? " + 
      "order by created_date desc", category, gender, search, search, true 
     ).from(0).fetch(50); 

どこが間違っていましたか?アドバイスをいただければ幸いです。

import play.db.helper.SqlQuery; 
... 
Set<String> categories = ...; 
posts = Post.find("(category_id in "+SqlQuery.inlineParam(categories)+" AND ...")....fetch(); 

答えて

1

:コードに続いて

posts = Post.find("category_id in (?)", ids).from(0).fetch(50); 

のEntityManagerと私の作品:

JPA.em().createNativeQuery("select from posts where category_id in (:ids)").setParameter("ids", ids).getResultList(); 

"idsは" "でありますList<Integer> ids "

0

あなたのコードは、動作し、次の試してみてくださいようなもので