我需要填充一个带有大量数据的表,因此我不想找到相关的对象,而只是放置它们的数字值。为此,我会构建一个简单的查询IE:
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,找不到以下选择关键字:插入article_category(aptif_id,category_id)value(2,12)]
如何使用Ebean调用真正的原始查询?
实际上我找到了一个解决方案,它是com.avaje.ebean.SqlUpdate
,可用于删除,更新和插入语句:
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
您也可以使用普通的旧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();