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

时间:2012-10-22 18:23:59

标签: playframework playframework-2.0 ebean

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

INSERT INTO article_category (article_id, category_id) VALUES (2,12);

无论如何都找不到用Ebean做这个的方法,我在努力:

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)VALUES(2,12)]

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

2 个答案:

答案 0 :(得分: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(); 

等。当然,它还允许在查询中设置命名参数(来自其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);

修改

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

答案 1 :(得分: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();