【发布时间】:2014-01-31 02:01:29
【问题描述】:
在 Play 应用程序 (2.2.x) 中,我使用 RawSql 来获取对象,但出现以下异常:
Execution exception[[PersistenceException: No ScalarType registered for class java.util.ArrayList]]
我的模型基本上看起来像
@Entity()
public class Metadata extends Model {
public static Model.Finder<String, Metadata> find = new Model.Finder<String, Metadata>(String.class, Metadata.class);
@Id
public String recordID;
@ManyToMany(cascade = CascadeType.REMOVE)
public List<Keyword> keywords = new ArrayList<Keyword>();
}
和
@Entity
public class Keyword extends Model {
@Id
public String keyword;
public static Model.Finder<String, Keyword> find = new Model.Finder<String, Keyword>(String.class, Keyword.class);
}
还有一个小助手豆
@Entity()
@Sql()
public class RecordId extends Model {
@Id
public String recordId;
}
现在我想查找所有具有关键字列表的记录。所以我写了一个RawSql,看起来像这样
SELECT metadata_record_id as recordId
FROM metadata_keyword
WHERE keyword_keyword IN (?)
GROUP BY recordId
HAVING count(recordId) = ?
ORDER BY recordId
在我的控制器中,我使用 setParameter 来填充参数。
RawSql rawSql = RawSqlBuilder.parse(sql).create();
List<RecordId> query = Ebean.find(RecordId.class).setRawSql(rawSql)
.setParameter(1, stringList)
.setParameter(2, stringList.size())
.findList();
我在这里缺少什么?将字符串列表转换为逗号分隔的字符串不起作用,这是我所期望的。我可以只连接查询字符串而不使用 setParameter(),但我想这很容易(至少在理论上)sql 注入。
【问题讨论】:
标签: java playframework ebean playframework-2.2