Java JPA映射多个表@OneToOne关系和相同的组合键字段
这是一个概念性的例子,我正在寻找最好的实现解决方案 我有以下三个表格:Java JPA映射多个表@OneToOne关系和相同的组合键字段,java,hibernate,jpa,one-to-one,composite-key,Java,Hibernate,Jpa,One To One,Composite Key,这是一个概念性的例子,我正在寻找最好的实现解决方案 我有以下三个表格: TABLE_A ------- SIREN NDA TABLE_B ------- SIREN NDA TABLE_C ------- SIREN NDA 这3个表具有相同的耦合警报器/NDA,这对耦合是唯一的,我必须使用它在表之间导航 创建此实体的最佳实践是什么?使用SIREN/NDA作为复合密钥对象,还是应该创建一个技术PK ID?是。如果SIREN/NDA属性耦合是唯一的,则应将该耦合设置为复合主键。您给出的示例
TABLE_A
-------
SIREN
NDA
TABLE_B
-------
SIREN
NDA
TABLE_C
-------
SIREN
NDA
这3个表具有相同的耦合警报器/NDA,这对耦合是唯一的,我必须使用它在表之间导航
创建此实体的最佳实践是什么?使用SIREN/NDA作为复合密钥对象,还是应该创建一个技术PK ID?是。如果SIREN/NDA属性耦合是唯一的,则应将该耦合设置为复合主键。您给出的示例有三个具有相同属性集的表。在某些情况下,我们会得到这些类型的表,特别是在数据库模式中表示类层次结构时。根据相关实体之间的不连续性和完整性,有两种通用方法 重叠与不相交(不相交) 不相交-子类没有共同的实体 重叠-子类至少有一个通用实体 全部与部分(完整性) Full-超类的所有实体至少属于以下一个 子类。也被称为覆盖 部分-超类的至少一个实体没有 属于任一子类 第一种方法-用于非不相交和非完整的类层次结构
- 为每个超类实体集创建一个表 根据标准实体集的转换方法
- 为每个具有 该实体集的每个属性的列 加上的主键的每个属性一个 超类实体集
- 超级类实体集中的这个主键也是 用作此新表的主键
Student
和Employee
实体是Person
的子类,Student
和Employee
子实体都具有SSN
作为公共属性。因此,它们是不相交的。它们也是不完整的,因为Person
超类中可能存在不属于两个子类Student
和Employee
中任何一个子类的条目
因此,在这里,我们为超类实体Person
创建一个表,其中SSN
是主键。我们还为子类实体Student
和Employee
创建表,其中SSN
是主键
第二种方法-用于不相交和完整的类层次结构
- 不要为超级类实体集创建表
- 为每个子类实体集创建一个表,包括所有 该子类实体集的属性和 超类实体集
机动车
和自行车
实体是机动车
的子类Car
和Bicycle
子实体没有任何重叠属性。因此,它们是不相交的。它们也是完整的,因为车辆
超类中的每个条目必须属于机动车
或自行车
所以在这里,我们不为超类实体Vehicle
创建表。我们仅为子类实体机动车
和自行车
创建表,其中车辆Id
和自行车Id
分别为主键。它们都包含来自超类实体的属性。因此,这两个表如下所示
机动车辆:[车辆Id、品牌、价格、发动机、燃油经济性]
自行车:[车辆Id,自行车Id,品牌,价格,齿轮,链环]
是的,您可以为所有三个实体创建相同的组合键,并在映射中选择不同的联接列名称。