JPA 我应该使用字段访问、create.query、update.query 还是 属性 访问、查找和设置器
JPA should i use field access, create.query, update.query or property access, find and setters
我是 JPA 新手,请多多关照,
我需要一些帮助,因为我无法决定使用哪个选项。
选项 1:
我将注释放在实体字段上方,并允许仅在创建时通过构造函数对对象进行写访问(然后将其保存到数据库)。据我了解,JPA 管理器自其字段访问以来仍然可以执行更新查询(如 所述)。
这样,如果我想更新或更改条目,我必须创建一个新查询
但是我必须自己创建这些查询(如所述 hier)。
选项 2:
我将注释放在 getters/setters 上方并使用 属性 访问
然后将实体管理器的查找方法与 setter(如 hier)一起使用。这将为我创建查询,但现在 setters 允许在对象创建后更改对象(在我将其添加到数据库之前)。
我的看法
此外,虽然 hier 最佳答案建议使用 setters
The right way to update an entity is that you just set the properties
you want to updated through the setters and let the JPA to generate
the update SQL for you during flushing instead of writing it manually
Hier 第二个答案(获得最多赞成票)指出字段访问是可行的方法。
我很困惑,但可能会将第二个选项与构造函数一起使用,并将 setters 仅用于实体管理器并将 setters 包设为私有。
信息
- 我使用 eclipseLink 2.5+ 作为持久性提供程序和 JPA 2.0
Java EE6
- 我应该提到我使用 SAP 的 Hana Cloud Platform 和
tutorial 使用 setters 的第一个选项
一个构造函数。
问题:
作为 JPA 新手,我是否应该使用选项 1 或 2 以及仅用于记录目的的数据库,其条目将在 1-30 天后删除。 ?
恕我直言,您应该采用第二种方法。 ORM 和 JPA 的全部意义在于避免处理数据库和编写查询。第一种方法微不足道的性能优势不值得您在同步、可读性和代码维护方面面临的麻烦。
话虽如此,但在某些情况下可能需要进行此黑客攻击。例如,如果您所做的只是执行写操作而从不读取,那么您不希望内存中充满日志对象。如果您对此不太确定,那么最好使用第二种方法
我是 JPA 新手,请多多关照, 我需要一些帮助,因为我无法决定使用哪个选项。
选项 1:
我将注释放在实体字段上方,并允许仅在创建时通过构造函数对对象进行写访问(然后将其保存到数据库)。据我了解,JPA 管理器自其字段访问以来仍然可以执行更新查询(如
选项 2: 我将注释放在 getters/setters 上方并使用 属性 访问 然后将实体管理器的查找方法与 setter(如 hier)一起使用。这将为我创建查询,但现在 setters 允许在对象创建后更改对象(在我将其添加到数据库之前)。
我的看法 此外,虽然 hier 最佳答案建议使用 setters
The right way to update an entity is that you just set the properties you want to updated through the setters and let the JPA to generate the update SQL for you during flushing instead of writing it manually
Hier 第二个答案(获得最多赞成票)指出字段访问是可行的方法。
我很困惑,但可能会将第二个选项与构造函数一起使用,并将 setters 仅用于实体管理器并将 setters 包设为私有。
信息
- 我使用 eclipseLink 2.5+ 作为持久性提供程序和 JPA 2.0 Java EE6
- 我应该提到我使用 SAP 的 Hana Cloud Platform 和 tutorial 使用 setters 的第一个选项 一个构造函数。
问题: 作为 JPA 新手,我是否应该使用选项 1 或 2 以及仅用于记录目的的数据库,其条目将在 1-30 天后删除。 ?
恕我直言,您应该采用第二种方法。 ORM 和 JPA 的全部意义在于避免处理数据库和编写查询。第一种方法微不足道的性能优势不值得您在同步、可读性和代码维护方面面临的麻烦。
话虽如此,但在某些情况下可能需要进行此黑客攻击。例如,如果您所做的只是执行写操作而从不读取,那么您不希望内存中充满日志对象。如果您对此不太确定,那么最好使用第二种方法