尚未找到任何有关如何使用 InheritanceType.JOINED 和两级继承的示例,因此我不确定如何操作。已经尝试了几天(并不像你想象的那么急切)。
我需要创建类来执行以下操作:
我正在考虑亲自拥有一个“种类”@DiscriminatorColumn
,并在供应商和客户或任何其他种类中拥有一个“起源”@DiscriminatorColumn
。问题是我找不到一种方法在一个表中为 @DiscriminatorValue
提供两个值。
所以我的问题是:做这样的事情应该怎样做?
谢谢大家。
伊利。
附注在“种类”级别的某些类别(供应商、客户等)中,可能需要为 child 使用与“国家”或“外国”不同的内容。
最佳答案
如果您的标准是最大限度地减少未使用的空间,那么JOINED
策略就是您应该采取的方式。示例方法可能如下所示:
@Entity // or @MappedSuperclass
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "ORIGIN", discriminatorType = DiscriminatorType.INTEGER)
public abstract class Person { ... }
您可以选择删除discriminatorType
,从而将其默认为字符串。
Supplier
和 Client
实体都充当映射的父类(super class)(因此它们不可持久,无法实例化和查询,不能成为关系的目标)。它们的状态和行为由可持久的具体实体继承。
@MappedSuperclass // or @Entity
public abstract class Supplier extends Person { ... }
@Entity
@Table(name = "NATIONAL_SUPPLIER")
@DiscriminatorValue("1")
public class National extends Supplier { ... }
@Entity
@Table(name = "FOREIGN_SUPPLIER")
@DiscriminatorValue("2")
public class Foreign extends Supplier { ... }
@MappedSuperclass // or @Entity
public abstract class Client extends Person { ... }
@Entity
@Table(name = "NATIONAL_CLIENT")
@DiscriminatorValue("3")
public class National extends Client { ... }
@Entity
@Table(name = "FOREIGN_CLIENT")
@DiscriminatorValue("4")
public class Foreign extends Client { ... }
显然,这样的层次结构可以水平和垂直扩展,但值得一提的是,层次结构越深或越宽,查询/插入可能会变得更加昂贵(换句话说:跨层次结构查询/插入将需要每个层次结构上更多的联接)新水平)。
关于孙子的java spring继承(供应商/客户与外国/国家),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760990/