微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Hibernate Onetomany自连接增加了独特的约束

如何解决Hibernate Onetomany自连接增加了独特的约束

我想添加一个实体与其自身的一对多关系:

@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引用其父对象。为了将某些东西用作参考,它必须是唯一的。

您可能想要的是孩子们通过其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}}。

执行此操作的通常方法是制作一个StringLayer parent @ManyToOne的属性mappedBy

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。