我试图禁用在我的双向关联上生成的外键约束.我已经设法为我的所有单向关联做了这个,但由于某种原因它在这里不起作用.
我确实知道最近在Hibernate 5.x中修复的ContraintMode.NO_CONSTRAINT的错误,我正在运行最新的Hibernate 5.2.6.
我的注释目前看起来像这样:
class Parent { @OneToMany(mappedBy="parent", cascade=CascadeType.ALL, orphanRemoval=true) @OrderColumn(name="childIndex") public ListgetChildren() { 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 ListgetChildren() { return children; } }
注意:最好javax.persistence.ForeignKey
改用JPA 2.1 。不建议使用本机注释。