我试图禁用在双向关联中生成的外键约束。我成功地为我所有的单向协会做到了这一点,但出于某种原因,它在这里不起作用。
我确实知道最近在Hibernate 5.x中修复了ContraintMode.NO_CONSTRAINT的错误,我正在运行最新的Hibernate 5.2.6。
我的注释目前如下所示:
class Parent {
@OneToMany(mappedBy="parent", cascade=CascadeType.ALL, orphanRemoval=true)
@OrderColumn(name="childIndex")
public List<Child> getChildren() {
return children;
}
}
class Child {
@ManyToOne(optional=false)
@JoinColumn(name="parent", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
public Parent getParent() {
return parent;
}
}
但是尽管有NO_CONSTRAINT,Hibernate仍然在child.parent -> parent.id上创建外键约束。
我还需要做些什么来抑制双向情况下的外键吗?
谢谢!
发布于 2017-09-12 01:53:03
这是Hibernate中已知的问题,请参阅https://hibernate.atlassian.net/browse/HHH-8805。
解决方案是在映射端添加@org.hibernate.annotations.ForeignKey(name = "none")。
class Parent {
@OneToMany(mappedBy="parent", cascade=CascadeType.ALL, orphanRemoval=true)
@OrderColumn(name="childIndex")
@org.hibernate.annotations.ForeignKey(name = "none")
public List<Child> getChildren() {
return children;
}
}
注意:更喜欢JPA2.1引入的javax.persistence.ForeignKey
。不建议使用本机注释。
发布于 2020-01-08 12:46:00
除了@Bustanil Arifin的答案之外:
您可以在下一种方式中将@OneToMany
和@javax.persistence.ForeignKey
组合起来:
class Parent {
@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name = "parent", foreignKey = @javax.persistence.ForeignKey(name = "none"))
public List<Child> getChildren() {
return children;
}
}
https://stackoverflow.com/questions/41729709
复制相似问题