为什么JPA CriteriaQuery不提供更新查询?

时间:2012-04-02 00:08:20

标签: hibernate jpa criteriaquery

JPA2.0中的CriteriaQuery提供了一种类型安全的方法来进行选择,这很棒。但我想知道它为什么不提供更新/删除操作?要批量更新/删除,您必须回到旧时编写容易出错的SQL或JPQL文本。 IMO,更新/删除的CriteriaQuery不应该证明是困难的,因为where cause处理与select相同。

希望这将在下一版本的JPA中实现。

1 个答案:

答案 0 :(得分:1)

因为JPA是ORM工具,其动机是将数据库记录映射到对象,以便可以使用编程语言而不是SQL来操纵数据库记录,因此不鼓励使用SQL / HQL / JPQL执行更新。

为防止使用容易出错的SQL或JPQL来更新对象,一旦使用CriteriaQuery检索对象列表,您只需循环遍历结果对象,然后更改对象的属性即可一个为了进行批量更新或删除。 JPA应该能够检测对这些对象所做的更改,并生成合适的SQL,以便在调用EntityManager.flush()时批量更新相应的记录。