我想添加一个实体与其自身的一对多关系:
@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
列上添加了唯一约束,我不希望这样做。
如何避免休眠状态添加唯一约束?
答案 0 :(得分:0)
您的映射当前使children
通过列PARENT_ID
引用其父对象。为了将某些东西用作参考,它必须是唯一的。
您可能想要的是孩子们通过其id
来引用他们的父母。
这应该可以解决问题:
@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
的类型为{ {1}}。
执行此操作的通常方法是制作一个String
和Layer parent
@ManyToOne
的属性mappedBy
。