如何禁用双向关联的 Hibernate 外键约束?
How do I disable Hibernate foreign key constraint on a bidirectional association?
我正在尝试禁用在我的双向关联上生成的外键约束。我已经为我所有的单向关联成功地做到了这一点,但由于某种原因它在这里不起作用。
我确实知道最近在 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.
上创建外键约束
我还需要做些什么来抑制双向情况下的外键吗?
谢谢!
这是 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;
}
}
注意: 更喜欢引入的 JPA 2.1 javax.persistence.ForeignKey
。本机注释已弃用。
除了@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;
}
}
我正在尝试禁用在我的双向关联上生成的外键约束。我已经为我所有的单向关联成功地做到了这一点,但由于某种原因它在这里不起作用。
我确实知道最近在 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.
上创建外键约束我还需要做些什么来抑制双向情况下的外键吗?
谢谢!
这是 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;
}
}
注意: 更喜欢引入的 JPA 2.1 javax.persistence.ForeignKey
。本机注释已弃用。
除了@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;
}
}