【问题标题】:JPA should i use field access, create.query, update.query or property access, find and settersJPA 我应该使用字段访问、create.query、update.query 还是属性访问、查找和设置器
【发布时间】:2017-07-04 04:42:56
【问题描述】:

我是 JPA 新手,请留在我身边, 我需要一些帮助,因为我无法决定使用哪个选项。

选项 1: 我将注释放在实体字段上方,并仅在创建时通过构造函数允许对对象的写访问(然后将其保存到数据库中)。据我了解,JPA 管理器自其字段访问以来仍然可以执行更新查询(如hier 所述)。 这样,如果我想更新或更改条目,我必须创建一个新查询 但是我必须自己创建这些查询(如hier 所述)。

选项 2: 我将注释放在 getter/setter 上方并使用属性访问 然后将实体管理器的 find 方法与 setter 一起使用(如hier)。这将为我创建查询,但现在设置器允许在创建对象后更改对象(在我将其添加到数据库之前)。

我的看法 此外,虽然hier 最佳答案建议使用设置器

更新实体的正确方法是设置属性 您想通过设置器进行更新并让 JPA 生成 在刷新期间为您更新 SQL,而不是手动编写它

Hier 第二个答案(投票最多)指出,字段访问是要走的路。

我很困惑,但可能会将第二个选项与构造函数一起使用,并将设置器仅用于实体管理器并将设置器包设为私有。

信息

  • 我使用 eclipseLink 2.5+ 作为持久性提供程序和 JPA 2.0 使用 Java EE6
  • 我应该提到我使用 SAP 的 Hana Cloud Platform 和 那里tutorial 使用带有设置器的第一个选项 构造函数。

问题: 我是否应该将选项 1 或 2 用作 JPA 新手以及仅用于记录目的的数据库,其条目将在 1-30 天后被删除。 ?

【问题讨论】:

标签: java jpa eclipselink jpa-2.0 sap-cloud-platform


【解决方案1】:

恕我直言,您应该采用第二种方法。 ORM 和 JPA 的全部意义在于避免处理数据库和编写查询。第一种方法的性能优势微不足道,不值得您在同步、可读性和代码维护方面遇到麻烦。

话虽如此,但可能存在需要这种 hack 的情况。例如,如果您所做的只是执行写入操作而从不读取,您不希望内存被日志对象淹没。如果您对此不太确定,那么最好使用第二种方法

【讨论】:

  • 我同意这一点,让我们看看是否有人有充分的理由不这样做。
猜你喜欢
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多