Playframework 如何在Ebean中创建自定义插入查询?

Playframework 如何在Ebean中创建自定义插入查询?,playframework,playframework-2.0,ebean,Playframework,Playframework 2.0,Ebean,我需要用大量的数据填充一个表,所以我不想找到相关的对象,而只想把它们的数值放进去。为此,我将构建一个简单的查询,即: INSERT INTO article_category (article_id, category_id) VALUES (2,12); 无论如何,我找不到一种方法来处理Ebian,我在尝试: RawSql rawSql = RawSqlBuilder .parse("INSERT INTO article_category (article_id, category

我需要用大量的数据填充一个表,所以我不想找到相关的对象,而只想把它们的数值放进去。为此,我将构建一个简单的查询,即:

INSERT INTO article_category (article_id, category_id) VALUES (2,12);
无论如何,我找不到一种方法来处理Ebian,我在尝试:

RawSql rawSql = RawSqlBuilder
    .parse("INSERT INTO article_category (article_id, category_id) VALUES (2,12)")
    .create();
但是,这会引发一个异常:

[RuntimeException:分析sql时出错,无法在中找到SELECT关键字:INSERT INTO article_category(article_id,category_id)值(2,12)]


如何使用Ebean调用真正原始的查询?

您也可以使用普通的JDBC连接和语句而不是Ebean

类似于此:

Connection connection = play.db.DB.getConnection();

Statement stmt = connection.createStatement();
stmt.executeUpdate("INSERT INTO article_category (article_id, category_id) VALUES (2,12)");

stmt.close();

实际上我找到了一个解决方案,它可以用于删除、更新和插入语句:

SqlUpdate down = Ebean.createSqlUpdate("DELETE FROM table_name WHERE id = 123");
down.execute(); 

SqlUpdate insert = Ebean.createSqlUpdate("INSERT INTO article_category (article_id, category_id) VALUES (2,12)");
insert.execute(); 
当然,它还允许在查询中设置命名参数(来自其API的示例):

编辑


还有一种类似的方法可以从DB中选择没有相应模型的行:

nico:Ebean的方法做到了这一点,而且是非常干净的方法,不管怎样,对于JDBC示例来说是thx。需要注意的是,至少在Play 2.3.x中包含了Ebean的版本(也就是3.something),任何包含少于三个单词的查询都将使用此解决方案失败(例如“LOCK”)。ebean似乎试图在其代码中分解查询并找到第三个单词,如果它不存在,就会抛出一个异常,如“字符串索引超出范围”嗯,ebean给我带来了很多痛苦-出于某种原因,在我的情况下,在重复键更新时执行
插入…
返回值1,这意味着一行受到了影响。但由于某些原因,当我手动查询时,查询被回滚,表中没有任何内容。奇怪。
String s = "UPDATE f_topic set post_count = :count where id = :id"
SqlUpdate update = Ebean.createSqlUpdate(s);
update.setParameter("id", 1);
update.setParameter("count", 50);

int modifiedCount = Ebean.execute(update);