【问题标题】:Correct approach to using JPA 2使用 JPA 2 的正确方法
【发布时间】:2012-04-16 20:29:59
【问题描述】:

我看到this link at Nabble 有人(James Sutherland)对某人说他们正在“执行删除所有 JPQL 查询。这基本上类似于执行您自己的 SQL,您负责正确执行查询以维护您的约束.

这不是在 JPA 中删除对象的常规方法。在 JPA 中,您通常读取对象,然后对其调用 remove()。"。

我想知道这是不是真的;基于删除不仅仅是简单表格的难度,我开始认为这是正确的。

到目前为止,我的想法是这样做:

  1. 执行选择语句,无论它们多么特殊(例如
    选择学生课程 > 4 且分数 >= 60 且
    的所有学生 2011 年至 2012 年学生注册)。
  2. 显示/编辑/删除 对象(因此 EntityManager 合并/持久/删除)
  3. 冲洗、起泡等

作为一种假设如何使用 JPA 的方法,这听起来是否合理,还是我不在基地?

【问题讨论】:

  • 是的,这就是 JPA 的想法。您加载对象并修改它们。

标签: jpa jpql


【解决方案1】:

这里讨论了 remove 的级联:Google App Engine - DELETE JPQL Query and Cascading。此外,例如,当使用乐观锁定时,进行批量更新不会更新版本列。因此批量更新/删除在 JPA 中有点残缺。

但我不会说这不是在 JPA 中删除对象的正常方法。当我需要根据某些条件删除 2、20 或 200 个对象时,首先选择并获取它们只是在每个对象上调用 remove() 在大多数情况下都是一个坏主意。

在规范中存在所有批量更新/删除是有原因的。

【讨论】:

  • 感谢您的快速回复。所以我想一个人必须回到使用结构化查询语言然后毕竟进行删除/更新?对我来说,这似乎几乎违背了 ORM 框架的目的。
  • @CodesNChaos:我从没这么说过! SQL 具有 JPA QL 中批量更新/删除的所有缺点,但没有增加太多好处(也许它稍微快)。我要说的是,根据纯面向对象的 JPA 方法的语义,批量更新的行为并不总是准确的。但 SQL 都没有。 PS:17 分钟不是 SO 的快速响应;-)。
  • 我质疑使用查询语言(无论是 SQL 还是 JPQL)的原因是它需要程序员深入研究查询语言,从而跟踪级联和外部关键约束。也就是说,我看到您关于批量删除的观点,为删除目的发送 1,000,000 条记录将是愚蠢的。 :)
猜你喜欢
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
相关资源
最近更新 更多