首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ebean:在List<String>中为setParameter()设置一个RawSql

Ebean:在List<String>中为setParameter()设置一个RawSql
EN

Stack Overflow用户
提问于 2014-01-12 07:39:40
回答 1查看 1.5K关注 0票数 3

在Play应用程序(2.2.x)中,我使用RawSql获取对象,并得到以下异常:

代码语言:javascript
复制
Execution exception[[PersistenceException: No ScalarType registered for class java.util.ArrayList]]

我的模型看起来就像

代码语言:javascript
复制
@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>();
}

代码语言:javascript
复制
@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);

}

还有一个小帮手豆

代码语言:javascript
复制
@Entity()
@Sql()
public class RecordId extends Model {
    @Id
    public String recordId;
}

现在,我想找到所有的记录,有一个关键字列表。所以我写了一个像这样的RawSql

代码语言:javascript
复制
SELECT metadata_record_id as recordId
FROM metadata_keyword
WHERE keyword_keyword IN (?)
GROUP BY recordId
HAVING count(recordId) = ?
ORDER BY recordId

在我的控制器中,我使用setParameter来填充参数。

代码语言:javascript
复制
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注入。

EN

回答 1

Stack Overflow用户

发布于 2019-02-14 13:35:29

我知道这已经很老了,你会继续前进的,但是,这是一条线

keyword_keyword在哪里(?)

移除两边的()。这样就行了。

给他们起名字比用这种方法更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21072408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档