首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何禁用双向关联上的Hibernate外键约束?

如何禁用双向关联上的Hibernate外键约束?
EN

Stack Overflow用户
提问于 2017-01-18 21:24:26
回答 2查看 13.3K关注 0票数 16

我试图禁用在双向关联中生成的外键约束。我成功地为我所有的单向协会做到了这一点,但出于某种原因,它在这里不起作用。

我确实知道最近在Hibernate 5.x中修复了ContraintMode.NO_CONSTRAINT的错误,我正在运行最新的Hibernate 5.2.6。

我的注释目前如下所示:

代码语言:javascript
运行
复制
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上创建外键约束。

我还需要做些什么来抑制双向情况下的外键吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-12 01:53:03

这是Hibernate中已知的问题,请参阅https://hibernate.atlassian.net/browse/HHH-8805

解决方案是在映射端添加@org.hibernate.annotations.ForeignKey(name = "none")

代码语言:javascript
运行
复制
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。不建议使用本机注释。

票数 19
EN

Stack Overflow用户

发布于 2020-01-08 12:46:00

除了@Bustanil Arifin的答案之外:

您可以在下一种方式中将@OneToMany@javax.persistence.ForeignKey组合起来:

代码语言:javascript
运行
复制
class Parent {

  @OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)
  @JoinColumn(name = "parent", foreignKey = @javax.persistence.ForeignKey(name = "none"))
  public List<Child> getChildren() {
    return children;
  }

}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41729709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档