1

以下是 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 中鉴别器列概念的扭曲吗?

一位同事争辩说,由于数据的结构不会因子类型而异,因此抽象方法和相应的实现应该移动到类似于策略模式的方法中。他的想法更好吗?

4

1 回答 1

1

更好是非常主观的。听起来组合和策略是一种有效的替代方案,这可能会阻止您为业务逻辑的每个实现映射另一个实体。

除了 JPA 和 hibernate,我读过的每一本 OO 设计书籍都以“优先组合胜过继承”开头,以共享行为。

假设您有一个数据对象,您不能在每个非休眠策略之间共享该对象并对其进行操作吗?无论如何,更少的 JPA/hibernate 对眼睛来说更容易。

于 2011-09-06T06:15:06.183 回答