java - 在 JPA 中使用继承来实现数据类型目的

标签 java design-patterns inheritance jpa orm

我有一些如下所示的实体:

@Entity
public abstract class AbstractEntity{

    @Id
    private Long id;
    String name;
    User author;
    @Lob
    byte[] data;

}


public class EntityOne extends AbstractEntity{
    // nothing new
}


public class EntityTwo extends AbstractEntity{
    // nothing new
}


public class EntityThree extends AbstractEntity{
    // nothing new
}

父类(super class)中定义的byte[]是每个子类实体中有趣的部分。我想要子类化的原因是强制执行键入规则,因为程序的某些部分需要 EntityThree,而程序的某些部分需要 EntityTwobyte[] 在不同的子类中具有完全不同的含义。

感觉有点奇怪,因为我不期望任何子类会添加任何字段或方法......所以我仅将继承用作打字工具。

这样的设计合理吗?有更好的方法来实现这一点吗?它是否违反了任何最佳实践?

最佳答案

这是一个很好的面向对象实践。对于数据库,使用 SINGLE_TABLE 继承策略(默认),并且可能为每个子类使用自定义 @DiscriminatorValue,否则您将在表中获得类名。

从 DBA 的角度来看,这与使用具有 TYPE 属性的单个类没有区别。

对于面向对象,子类可能更有用,例如您可以使用它以不同的方式实现某些方法或实现访问者或策略模式,而不是繁琐的 if-then-else 或 instanceof 结构。

关于java - 在 JPA 中使用继承来实现数据类型目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8765660/

相关文章:

java - 类型转换泛型

java - spring boot oauth2管理httpbasic认证

java - 具有 Spring Security 的 AngularJS Web 应用程序

Java - 如何将一对 3 整数插入优先级队列?

asp.net - 哪种模式最匹配详细的场景,这是一种很好的做法吗?

c# - 在处理静态方法时将代码保持在同一级别

java - 如何使用 Websphere Liberty Profile 8.5 中定义的数据源?

c# - 延迟初始化注入(inject)构造函数的依赖项

c# - 在派生类中调用泛型函数的更好方法

c++ - 为什么通过公开继承另一个类来构建一个类是一种糟糕的做法?