Мне нужно обновить несколько строк в Таблице a, и, кажется, нормально использовать объектно-ориентированный подход с помощью цикла for и выполнения слияния.
...
// get list and assign columns to be updated
...
for (MyEntity e : entityList) {
em.merge(e);
}
..
этот подход также позволяет мне обновлять другие таблицы (как другое свойство pf MyEntity).на одном из вопросов, опубликованных здесь обновление нескольких строк с использованием 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 ... есть ли другой способ добиться этого?
Спасибо.