6

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

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

4

1 回答 1

2

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

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

于 2012-04-02T06:45:09.183 回答