下面是一个带JPA注释的类型层次结构,其中所有数据字段(以及相关的getter和setter)都是超类型以及实现业务逻辑的抽象方法的成员。在不增加数据成员的情况下,有许多子类型可以实现这些抽象方法,因此我们使用单表继承策略,因此我们只需要数据库中的一个表来支持这种类型层次结构。
我之所以这样做,是因为根据数据的内容,必须实现不同的行为才能实现最终目标。
@Entity
@Table
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
public abstract class SuperEntity {
// Several fields and getters and setters
...
// Abstract method declarations for business logic
...
}
@Entity
@DiscriminatorValue("some value")
public class SomeSubtype extends SuperEntity {
// Implementations of abstract methods
...
}
这是对JPA/Hibernate中鉴别器列概念的颠覆吗?
一位同事认为,由于数据的结构从子类型到子类型都不会改变,因此抽象方法和相应的实现应该移动到类似于策略模式方法的东西中。他的想法更好吗?
发布于 2011-09-06 14:15:06
更好是非常主观的。听起来组合和策略是一个有效的替代方案,这可能会使您不必为业务逻辑的每个实现映射另一个实体。
抛开JPA和hibernate不谈,我读过的每一本OO设计书籍都以“偏爱组合而不是继承”作为共享行为的开头。
假设您有一个数据对象,难道您不能在每个非hibernate策略之间共享该对象并对其进行操作吗?无论如何,拥有更少的JPA/hibernate对眼睛来说是更容易的。
https://stackoverflow.com/questions/7314509
复制相似问题