JPA2.0中的CriteriaQuery提供了一种类型安全的方法来进行选择,这很棒。但我想知道它为什么不提供更新/删除操作?要批量更新/删除,您必须回到旧时编写容易出错的SQL或JPQL文本。 IMO,更新/删除的CriteriaQuery不应该证明是困难的,因为where cause处理与select相同。
希望这将在下一版本的JPA中实现。
答案 0 :(得分:1)
因为JPA是ORM工具,其动机是将数据库记录映射到对象,以便可以使用编程语言而不是SQL来操纵数据库记录,因此不鼓励使用SQL / HQL / JPQL执行更新。
为防止使用容易出错的SQL或JPQL来更新对象,一旦使用CriteriaQuery
检索对象列表,您只需循环遍历结果对象,然后更改对象的属性即可一个为了进行批量更新或删除。 JPA应该能够检测对这些对象所做的更改,并生成合适的SQL,以便在调用EntityManager.flush()
时批量更新相应的记录。