孙子的java spring继承(供应商/客户与外国/国家)

标签 java spring jpa inheritance

尚未找到任何有关如何使用 InheritanceType.JOINED 和两级继承的示例,因此我不确定如何操作。已经尝试了几天(并不像你想象的那么急切)。

我需要创建类来执行以下操作:

enter image description here

我正在考虑亲自拥有一个“种类”@DiscriminatorColumn,并在供应商和客户或任何其他种类中拥有一个“起源”@DiscriminatorColumn。问题是我找不到一种方法在一个表中为 @DiscriminatorValue 提供两个值。

所以我的问题是:做这样的事情应该怎样做?

谢谢大家。

伊利。

附注在“种类”级别的某些类别(供应商、客户等)中,可能需要为 child 使用与“国家”或“外国”不同的内容。

最佳答案

如果您的标准是最大限度地减少未使用的空间,那么JOINED策略就是您应该采取的方式。示例方法可能如下所示:

@Entity // or @MappedSuperclass
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "ORIGIN", discriminatorType = DiscriminatorType.INTEGER)
public abstract class Person { ... }

您可以选择删除discriminatorType,从而将其默认为字符串。

SupplierClient 实体都充当映射的父类(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/

相关文章:

java - Spring Data - 无法捕获服务层中的 DataIntegrityViolationException

java - 使用 BreakIterator 跳过非字母字符

java - 在 android 应用程序中使用为 angular js 编写的 rest api

java - 为什么我的对象在创建时遇到问题?

java - 从另一个 portlet (Liferay + Spring) 获取 Portlet Application Context

Hibernate 不在一对多关系中插入列

java - Oracle 中 CHAR 主键列的 hibernate 和填充

hibernate - Postgresql CITEXT 数据类型问题 JPA Hibernate

java - 一段时间后失去与 MySQL 的连接,并且没有重新连接

java - 声音不在gridview中播放