Hibernate Onetomany self join 添加唯一约束
Hibernate Onetomany self join adds unique constraint
我想添加实体与其自身的一对多关系:
@Entity
public class Layer {
@Id
private Long id;
@Column(name = "PARENT_ID")
private String parentId;
@OneToMany
@JoinColumn(name = "PARENT_ID", referencedColumnName = "PARENT_ID", updatable = false, insertable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Set<Layer> siblings;
}
这意味着我想让所有其他实体共享相同的 parentId
。我想要它的原因是因为为这个实体编写查询会更容易。
问题是在数据库生成时(spring.jpa.properties.hibernate.hbm2ddl.auto=create
)它还在 PARENT_ID
列上添加了一个唯一约束,我不希望这样。
如何防止休眠添加唯一约束?
您的映射当前使 children
通过列 PARENT_ID
引用它们的 parent。为了将某物用作参考,它必须是唯一的。
您可能想要的是 children 通过其 id
引用他们的 parent。
这应该可以解决问题:
@OneToMany
@JoinColumn(name = "PARENT_ID", referencedColumnName = "ID", updatable = false, insertable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Set<Layer> children;
我不确定您是否也可以拥有 String parentId
。
首先,它映射到与 children
属性 相同的列,但具有不同的类型:id
是 Long
类型,而 parentId
应该引用它类型为 String
.
通常的做法是制作 属性 Layer parent
其中 @ManyToOne
和 mappedBy
children
.
我想添加实体与其自身的一对多关系:
@Entity
public class Layer {
@Id
private Long id;
@Column(name = "PARENT_ID")
private String parentId;
@OneToMany
@JoinColumn(name = "PARENT_ID", referencedColumnName = "PARENT_ID", updatable = false, insertable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Set<Layer> siblings;
}
这意味着我想让所有其他实体共享相同的 parentId
。我想要它的原因是因为为这个实体编写查询会更容易。
问题是在数据库生成时(spring.jpa.properties.hibernate.hbm2ddl.auto=create
)它还在 PARENT_ID
列上添加了一个唯一约束,我不希望这样。
如何防止休眠添加唯一约束?
您的映射当前使 children
通过列 PARENT_ID
引用它们的 parent。为了将某物用作参考,它必须是唯一的。
您可能想要的是 children 通过其 id
引用他们的 parent。
这应该可以解决问题:
@OneToMany
@JoinColumn(name = "PARENT_ID", referencedColumnName = "ID", updatable = false, insertable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Set<Layer> children;
我不确定您是否也可以拥有 String parentId
。
首先,它映射到与 children
属性 相同的列,但具有不同的类型:id
是 Long
类型,而 parentId
应该引用它类型为 String
.
通常的做法是制作 属性 Layer parent
其中 @ManyToOne
和 mappedBy
children
.