hibernate hql - 执行更新查询后返回更新的行id列表

时间:2017-12-27 06:22:56

标签: java oracle hibernate hql

我在Java spring MVC应用程序中使用Hibernate查询语言(HQL)和Oracle数据库。我已经用这种方式编写了一个HQL更新查询:

String hql = "update " + MyModel.class.getName() + " e set e.field = " + value + " where ..."
//Acquiring session
...
Query query = session.createQuery(hql);
int result = query.executeUpdate();

executeUpdate()方法返回更新的行数。但是我希望在执行更新查询后获得更新行的ID列表。有没有办法在HQL中执行此操作?

2 个答案:

答案 0 :(得分:1)

据我所知,JPA / Hibernate中没有这样的功能。但您可以创建本机查询并使用本机SQL。我不知道oracle,但在PostgreSQL中我会写:

String sql = "update table set field = :values where ... returning id";
Query query = session.createNativeQuery(sql);
query.setParameter("value", value);
List ids = query.list();

可能是oracle有类似的功能,这对你有帮助。

答案 1 :(得分:0)

Blaze-Persistence是一个在JPA / Hibernate之上工作的库,它对此提供了支持。

有关此的更多信息:https://persistence.blazebit.com/documentation/core/manual/en_US/index.html#returning-from-update-statement