java spring 继承孙辈(suplier/client vs foreign/national)
java spring inheritance for grandchild (suplier/client vs foreign/national)
没能找到任何关于如何使用 InheritanceType.JOINED 和两级继承的例子,所以我不确定该怎么做。已经尝试了几天(不是很急切,如你所想)。
我需要创建 类 来做这样的事情:
我正在考虑亲自 "kind" @DiscriminatorColumn
和供应商和客户或任何其他类型的 "Origin" @DiscriminatorColumn
。问题是我找不到在一个 table.
中为 @DiscriminatorValue
设置两个值的方法
所以我的问题是:执行此类操作的假定方法是什么?
谢谢大家
伊利.
P.S。在 "kind" 级别(供应商、客户等)的某些 类 中,可能需要使用与“国家”或 "Foreign" 不同的内容。
如果您的标准是尽量减少未使用的 space,那么 JOINED
策略就是您应该采用的方法。示例方法可能如下所示:
@Entity // or @MappedSuperclass
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "ORIGIN", discriminatorType = DiscriminatorType.INTEGER)
public abstract class Person { ... }
您可以选择删除 discriminatorType
从而将其默认为字符串。
Supplier
和 Client
实体都充当映射的超类(因此它们不可持久化,无法实例化和查询,不能成为关系的目标)。它们的状态和行为由可持久化的具体实体继承。
@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 { ... }
显然,这样的层次结构可以水平和垂直扩展,但值得一提的是,层次结构越深或越宽,querying/inserting 可能变得更昂贵(换句话说:querying/inserting 跨层次结构每个新级别都需要更多的连接)。
没能找到任何关于如何使用 InheritanceType.JOINED 和两级继承的例子,所以我不确定该怎么做。已经尝试了几天(不是很急切,如你所想)。
我需要创建 类 来做这样的事情:
我正在考虑亲自 "kind" @DiscriminatorColumn
和供应商和客户或任何其他类型的 "Origin" @DiscriminatorColumn
。问题是我找不到在一个 table.
@DiscriminatorValue
设置两个值的方法
所以我的问题是:执行此类操作的假定方法是什么?
谢谢大家
伊利.
P.S。在 "kind" 级别(供应商、客户等)的某些 类 中,可能需要使用与“国家”或 "Foreign" 不同的内容。
如果您的标准是尽量减少未使用的 space,那么 JOINED
策略就是您应该采用的方法。示例方法可能如下所示:
@Entity // or @MappedSuperclass
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "ORIGIN", discriminatorType = DiscriminatorType.INTEGER)
public abstract class Person { ... }
您可以选择删除 discriminatorType
从而将其默认为字符串。
Supplier
和 Client
实体都充当映射的超类(因此它们不可持久化,无法实例化和查询,不能成为关系的目标)。它们的状态和行为由可持久化的具体实体继承。
@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 { ... }
显然,这样的层次结构可以水平和垂直扩展,但值得一提的是,层次结构越深或越宽,querying/inserting 可能变得更昂贵(换句话说:querying/inserting 跨层次结构每个新级别都需要更多的连接)。