我正在使用Ebean构建Play2应用程序。我创建了一个服务类,其中包含一个通过id列表获取场地的方法:
public static List<Venue> getVenuesForIds(List<Long> list){
ArrayList<Venue> venues = new ArrayList<Venue>();
String sql = "select c.id, c.name from Company c where in (:ids)";
List<SqlRow> sqlRows =
Ebean.createSqlQuery(sql).setParameter("ids", list).findList();
for(SqlRow row : sqlRows) {
venues.add(new Venue(row.getLong("id"), row.getString("name")));
}
return venues;
}
但我得到了:
[PersistenceException: Query threw SQLException:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'in (201639091,201637666)' at line 1 Query was: select c.id, c.name from Company c where in (?,?) ]
我已阅读http://www.avaje.org/ebean/introquery.html,但可能错过了正确的语法。我想在原始sql中执行此操作。 我错过了什么?
答案 0 :(得分:3)
您的请求似乎不正确。
怎么样:
"select c.id, c.name from Company c where c.id in (:ids)";
答案 1 :(得分:3)
您不需要执行此类“复杂”查询,如果您在Finder<I,T>
模型中使用常见Venue
(一次)就足够了:
@Entity
@Table(name = "Company")
public class Venue extends Model {
@Id
public Long id;
public String name;
// other fields
public static Finder<Long, Venue> find
= new Finder<Long, Venue>(Long.class, Venue.class);
}
那么你可以用你方法中的单行代码完成同样的任务:
public static List<Venue> getVenuesForIds(List<Long> ids){
return Venue.find.select("id,name").where().idIn(ids).findList();
}
或类似的表达:
public static List<Venue> getVenuesForIds(List<Long> ids){
return Venue.find.select("id,name").where().in("id",ids).findList();
}