bra*_*ter 6 polymorphism inheritance annotations jpa
我正在尝试使用带有JPA注释的Hibernate来设置多态行为.
创建一个(抽象)类来封装继承层次结构参与持久性所需的状态和行为似乎是明智的(甚至可能是必要的); 例如
是从一个抽象类继承加上持久性这种方式的好坏实践?有哪些优点/缺点?是否有关于在JPA中处理继承的最佳实践?
我不确定你的问题是否有绝对的答案,这实际上取决于你的特定情况以及你想从OO的角度来表达什么.提供一些例子可能会有所帮助.
但我怀疑你可能想要了解Mapped Superclasses.以下是JPA规范的一些摘录:
实体可以从提供持久实体状态和映射信息的超类继承,但它本身不是实体.通常,这种映射的超类的目的是定义多个实体类共有的状态和映射信息.
与实体不同,映射的超类不可查询,不能作为参数传递给
EntityManager或Query操作.映射的超类不能成为持久关系的目标.抽象类和具体类都可以指定为映射的超类.的
MappedSuperclass注释(或mapped-superclassXML描述符元素)被用于指定映射超类.指定为
MappedSuperclass没有为其定义的单独表的类 .其映射信息将应用于从其继承的实体.
我认为你还应该阅读各种继承策略来表示JPA支持的数据库级别的继承(每个类层次结构的单个表,每个具体类的表,连接的子类),因为它们不提供相同级别的支持.多态查询.JPA规范很好地涵盖了这一点.
以下相关参考文献