我的主表有一个复合主键,其中一个字段是一个序列。它与其他两个表具有一对一关系,其中组合键是这些表的主键/外键。在我的Java代码中,我有一个包含@SequenceGenerator
的PK类。由于列在表之间共享,因此我尝试让所有实体都使用相同的PK类。但是,由于我的PK类具有一个@SequenceGenerator
字段,因此每当我尝试插入外键表时,hibernate都会生成一个附加序列,并且由于找不到父键而导致插入失败。
由于@SequenceGenerator
生成了用于随后插入其他表的附加序列,因此我为每个其他表克隆了PK类,并删除了@SequenceGenerator
,因此各列相同并且休眠不会t在插入过程中生成一个新序列。但是,这带来了另一个问题,即休眠状态期望与提供的状态不同的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 {}
由于列名相同,所以我希望冬眠不会生成异常,但会抛出org.hibernate.TypeMismatchException: Provide id of the wrong type for class AddrEntity. Expected AddrEntityPK, got class PhoneEntityPK