gpt4 book ai didi

inheritance - 通过注解实现多态 JPA 的最佳实践

转载 作者:行者123 更新时间:2023-12-04 14:52:12 25 4
gpt4 key购买 nike

我正在尝试使用带有 JPA 注释的 Hibernate 设置多态行为。

创建一个(抽象)类来封装继承层次结构参与持久性所需的状态和行为似乎是明智的(甚至可能是必要的);例如

  • 我需要注释 Id 属性,如果不公开字段,我无法在接口(interface)中执行此操作,以避免父类(super class)
  • 上出现“实体上未指定标识符”异常
  • 如果我使用每类层次表的方法
  • ,我需要子类来提供 DiscriminatorValue

    以这种方式继承与持久性相关的抽象类是好还是坏?有什么优点/缺点?是否有关于在 JPA 中处理继承的最佳实践?

    最佳答案

    我不确定您的问题是否有绝对的答案,这实际上取决于您的特定情况以及您希望从 OO 的角度代表什么。提供一些例子可能会有所帮助。

    但我怀疑您可能想了解 映射父类(super class) .以下是 JPA 规范的一小部分摘录:

    An entity may inherit from a superclass that provides persistent entity state and mapping information, but which is not itself an entity. Typically, the purpose of such a mapped superclass is to define state and mapping information that is common to multiple entity classes.

    A mapped superclass, unlike an entity, is not queryable and cannot be passed as an argument to EntityManager or Query operations. A mapped superclass cannot be the target of a persistent relationship.

    Both abstract and concrete classes may be specified as mapped superclasses. The MappedSuperclass annotation (or mapped-superclass XML descriptor element) is used to designate a mapped superclass.

    A class designated as MappedSuperclass has no separate table defined for it. Its mapping information is applied to the entities that inherit from it.



    而且我认为您还应该阅读 JPA 支持的各种继承策略来表示数据库级别的继承(每个类层次结构的单个表,每个具体类的表,连接的子类),因为它们不提供相同级别的支持多态查询。 JPA 规范很好地涵盖了这一点。

    以下相关引用资料。

    引用
  • JPA 1.0 规范
  • 2.1.9 继承
  • 2.1.10 继承映射策略
  • Hibernate 注释引用指南
  • 2.2.4. Mapping inheritance
  • 2.2.4.4. Inherit properties from superclasses
  • 关于inheritance - 通过注解实现多态 JPA 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3442845/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com