【发布时间】:2011-12-24 03:11:35
【问题描述】:
我需要更新表 a 中的多行,通过使用 for 循环并进行合并来使用面向对象的方法似乎没问题。
...
// get list and assign columns to be updated
...
for (MyEntity e : entityList) {
em.merge(e);
}
..
这种方法还使我能够更新其他表(作为其他属性 pf MyEntity)。 在此处发布的一个问题 updating multiple rows using JPA 上,使用 namedQuery 进行更新的第二个选项似乎更快。但是,如果我还需要批量更新多个表,更新将如何实现?
我试过了:
@NamedQuery(name="Agent.updateAccountStatusByTree",
query="UPDATE com.sample.core.data.Agent a "
+ "INNER JOIN com.sample.core.data.Player p "
+ "ON a.player.id = p.id "
+ "SET a.accountStatus=:accountStatus, p.status=:accountStatus "
+ "WHERE a.site.id=:siteId and a.agentTree like :agentTree")})
但是这会引发:
org.hibernate.hql.ast.QuerySyntaxException: expecting "set", found 'INNER'
我尝试的另一个选项是:
@NamedQuery(name="Agent.updateAccountStatusByTree",
query="update com.sample.core.data.Agent a "
+ "set a.accountStatus=:accountStatus, a.player.status=:playerStatus "
+ "where a.site.id=:siteId and a.agentTree like :agentTree")})
因为我已经有一个对另一个表的引用,但是这会产生一个无效的查询,抛出一个 sql 语法异常......还有其他方法可以实现吗?
谢谢。
【问题讨论】:
标签: hibernate jpa sql-update