当我使用每个子类一个表策略时,我的基类(父类)包含复合主类。
@Column(nullable = false)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XXX")
@SequenceGenerator(name = "XXX", sequenceName = "XXX", allocationSize = 1)
private Long systemId;
@Id
@Column(nullable = false)
private Long version;
因此,扩展此属性的所有实体(据我所知)都会继承 ids 及其带注释的属性。 问题是,当我创建一个新的父实体时,主要是根据序列创建的,没关系。但是当我创建子类实例时,它会增加我不需要的父 ID(从 seq 创建一个新的主 ID),因为我使用每个子类的表,并且主 ID 必须相同。
问题:如何抑制子类中的 id 生成?
@Entity
@PrimaryKeyJoinColumns(
{
@PrimaryKeyJoinColumn(name = "systemId"),
@PrimaryKeyJoinColumn(name = "version")
}
)
public class SUb extends Parent {
public SUb (Parent t) {
super(t);
}
public SUb () {
}
...
... no ids...
最佳答案
创建子类时,它将发出两个插入:
- 基类中的一个
- 子类中的一个
子类不继承@Ids,而是使用:
- 系统ID
- 版本
作为基表关联列的 FK。
因此,虽然基类具有由这两列组成的主键:
- 生成的系统 ID 序列
- 手动分配的版本
子类应该具有:
- sequnceId 列,其 FK 指向基本 sepqunceId 列
- 与基本版本列具有 FK 的版本列
因此在插入子类实体时不应调用该序列两次。
您能否确认数据库表遵循此设计?
关于java - Hibernate子类id在每个子类的表中生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24529473/