java - 如何在 Hibernate 中处理在数据库中共享相同复合 id 的多个表实体?
问题描述
我的主表有一个复合主键,其中一个字段是一个序列。它与其他两个表具有一对一的关系,其中复合键是这些各自表的主键/外键。在我的 java 代码中,我有一个包含@SequenceGenerator
. 由于列在表之间共享,我尝试让我的实体都使用相同的 PK 类。但是,由于我的 PK 类有一个具有 的字段,因此@SequenceGenerator
每当我尝试插入外键表时,休眠都会生成一个额外的序列,并且由于找不到父键而导致插入失败。
由于@SequenceGenerator
为后续插入到其他表中生成了一个额外的序列,我为每个其他表克隆了我的 PK 类并删除了,@SequenceGenerator
所以列是相同的,hibernate 在插入期间不会生成新序列。然而,这产生了另一个问题,即 hibernate 期望与提供的 PK 类不同的 PK 类。
public class AddrEntityPK implements Serializable {
@Id
private long addrTyId;
@SequenceGenerator(name = "ADDR_SEQ", sequenceName = "ADDR_SEQ", allocationSize = 1)
@GeneratedValue(generator = "ADDR_SEQ")
private long addrSeqNum;
}
public class PhoneEntityPK implements Serializable {
@Id
private long addrTyId;
@Id
private long addrSeqNum;
}
public class ElecrMailEntityPK implements Serializable {
@Id
private long addrTyId;
@Id
private long addrSeqNum;
}
@Entity
@IdClass(AddrEntityPK.class)
public class AddrEntity {}
@Entity
@IdClass(PhoneEntityPK.class)
public class PhoneEntity {}
@Entity
@IdClass(ElecrMailEntityPK.class)
public class ElecrMailEntity {}
由于列名相同,我希望 hibernate 不会生成异常,而是会抛出org.hibernate.TypeMismatchException: Provide id of the wrong type for class AddrEntity. Expected AddrEntityPK, got class PhoneEntityPK
解决方案
推荐阅读
- swiftui - RealityKit - 使用 SwiftUI 显示 .reality 文件
- python - 无法在与任何随机城市相关的有效负载中使用 lat,long 的值?
- swift - 具有静态框架子依赖项的 XCFramework
- liquibase - Spring 5项目中的Liquibase休眠连接警告
- scikit-learn - 使用 scikit-learn 从 PCA 和 LDA 得到的结果
- javascript - 如何在节点js中制造mysql查询的结果
- javascript - 隐藏语义 ui 的侧边栏在桌面或平板电脑视图中做出反应
- typescript - 为类型或返回类型的函数编写接口
- angular - ionic 5 - 用户提及
- context-free-grammar - 这种上下文无关语法是否模棱两可?