我需要填充一个包含大量数据的表,所以我不想找到相关的对象,只需要输入它们的数值。为此,我将构建一个简单的查询,即:
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调用真正的原始查询?
答案 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();