huz*_*yfe 59 java orm inheritance hibernate jpa
我正在使用Play Framework 1.2.4 PostgreSQL和JPA.我想有一个Model层次结构,看看有一些替代方法可以做到这一点.
我有一个基类(这是抽象的)和两个扩展这个基类的具体类.我想要拥有具体的类,我不想坚持这个基类.在基类中,我有另一个Model类作为属性,换句话说,我@ManyToOne在我的基类中有关系.
我的问题是实现这个的最佳方法是什么?使用@MappedSuperclass或@Inheritance与TABLE_PER_CLASS策略?我有点困惑,因为它们看起来几乎相同.
我对将来可能面临的查询和性能问题也有一些担忧.
JB *_*zet 122
必须使用MappedSuperClass来继承属性,关联和方法.
当您拥有实体和多个子实体时,必须使用实体继承.
您可以通过回答以下问题来判断您是否需要其中一个:模型中是否存在可能与基类关联的其他实体?
如果是,那么基类实际上是一个实体,您应该使用实体继承.如果不是,那么基类实际上是一个包含几个不相关实体共有的属性和方法的类,您应该使用映射的超类.
例如:
Vla*_*cea 17
正如我在解释这个文章,@MappedSupperclass是不是不同的@Inheritance注解.
@MappedSuperclass告诉JPA提供程序包含基类持久属性,就好像它们是由扩展了注释的超类的子类声明的一样@MappedSuperclass.
但是,继承仅在OOP世界中可见,因为从数据库的角度来看,没有基类的指示.只有子类实体将具有关联的映射表.
该@Inheritance注释是为了兑现在数据库表结构的OOP继承模型.更多,您可以查询带注释的基类,@Inheritance但不能对带注释的基类执行此操作@MappedSuperclass.
现在,您想要使用@InheritanceJPA注释的原因是实现行为驱动模式,如策略模式.
另一方面,@MappedSuperclass这只是一种@Id使用公共基类重用基本属性,关联甚至实体的方法.不过,您可以使用@Embeddable类型实现几乎相同的目标.唯一的主要区别是您不能重复使用@Id定义@Embeddable,但您可以使用它@MappedSuperclass.
| 归档时间: |
|
| 查看次数: |
28456 次 |
| 最近记录: |