Ebean:设置列表 for RawSql中的setParameter()

问题描述 投票:3回答:1

在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
1个回答
0
投票

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

WHERE关键字关键字IN(?)

取下两侧的()。应该这样做。

命名它们比用这种方式更好。

© www.soinside.com 2019 - 2024. All rights reserved.