如何在Ebean中创建自定义INSERT INTO查询?

bie*_*ior 9 playframework ebean playframework-2.0

我需要填充一个包含大量数据的表,所以我不想找到相关的对象,只需要输入它们的数值.为此,我将构建一个简单的查询,即:

INSERT INTO article_category (article_id, category_id) VALUES (2,12);
Run Code Online (Sandbox Code Playgroud)

无论如何都找不到用Ebean做这个的方法,我试过:

RawSql rawSql = RawSqlBuilder
    .parse("INSERT INTO article_category (article_id, category_id) VALUES (2,12)")
    .create();
Run Code Online (Sandbox Code Playgroud)

然而,这引发了一个例外:

[RuntimeException:解析sql时出错,找不到SELECT关键字:INSERT INTO article_category(article_id,category_id)VALUES(2,12)]

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

bie*_*ior 23

实际上我找到了一个解决方案,它com.avaje.ebean.SqlUpdate可以用于DELETES,UPDATES和INSERTS语句:

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(); 
Run Code Online (Sandbox Code Playgroud)

当然,它还允许在查询中设置命名参数(来自其API的示例):

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);
Run Code Online (Sandbox Code Playgroud)

编辑

还有类似的方法从DB中选择没有相应模型的行: com.avaje.ebean.SqlQuery


nde*_*rge 8

您也可以使用普通的旧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();
Run Code Online (Sandbox Code Playgroud)