Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Hibernate实体类拆分为类层次结构_Java_Hibernate_Oop_Inheritance_Composition - Fatal编程技术网

Java 将Hibernate实体类拆分为类层次结构

Java 将Hibernate实体类拆分为类层次结构,java,hibernate,oop,inheritance,composition,Java,Hibernate,Oop,Inheritance,Composition,我有一个名为Product的表和相应的Hibernate实体类Product.java 产品有不同的类型和子类型,在表中有两列分别称为“类型”和“子类型”。在应用程序中,它们在概念上是不同的。与中一样,理想情况下应该有一个产品类层次结构,但不幸的是,在带有if条件和switch情况的单实体模型类中实现了许多代码 我正在寻找将其重构为类层次结构的方法。我提出了一些选择,但我不相信它们是最好的方法,我正在寻求反馈和建议 Hibernate的每类表层次结构:这很好,但是看起来这个决定应该在代码第一次编

我有一个名为Product的表和相应的Hibernate实体类Product.java

产品有不同的类型和子类型,在表中有两列分别称为“类型”和“子类型”。在应用程序中,它们在概念上是不同的。与中一样,理想情况下应该有一个产品类层次结构,但不幸的是,在带有if条件和switch情况的单实体模型类中实现了许多代码

我正在寻找将其重构为类层次结构的方法。我提出了一些选择,但我不相信它们是最好的方法,我正在寻求反馈和建议

  • Hibernate的每类表层次结构:这很好,但是看起来这个决定应该在代码第一次编写时做出。现在,由于产品类已经实现,并且是项目的核心,我认为遵循这种方法将不是一件容易的任务。此外,这种方法的主要优点似乎是能够在不同的子类中指定不同的字段。这并不适合我们,因为Product对象在应用程序中的行为应该不同,但行中存储的变量/数据是“Products”的所有子类所必需的。我可以有一个定义了所有实体变量的父类,而子类根本没有变量吗

  • 组合:为不同类型的产品创建类,但每个类都包含一个产品变量。这在某种程度上是可行的,因为我可以将所有公共代码保留在产品类本身中,但将所有自定义代码移到这些类中


  • 我可以使用一些反馈/建议,以确定进行重构该类的最佳方式

    您可能需要一个连接的子类模型,而不是每个类一个表,这很难以多态方式处理。模式无法显著改变这一点,因为我们将不得不运行查询来填充生产中的数据。另外,我说的是每个类层次结构的表,而不是每个类的表。那么您要查找的是“单个表”<代码>每类表是JPA中的一个特定术语,指为每种具体类型提供单独的表。显然,不清楚你所说的“分解变量”是什么意思;如果某些属性只存在于某些子类上,通常的关系方法是连接它们。