【问题标题】:hbm2ddl - How to avoid that Hibernate is creating Foreign Key constraints?hbm2ddl - 如何避免 Hibernate 创建外键约束?
【发布时间】:2015-11-16 05:47:07
【问题描述】:

亲爱的,我正在使用带有 hbm2ddl 的 Hibernate。我不喜欢这样,因为创建了一个关系外键约束。不幸的是,到目前为止我无法实现。我尝试使用 Hibernate 和 JPA 注释,但没有运气。 有什么提示吗?

我正在使用 Hibernate 4.3.1 和 mysql 5.6

@Entity
class Artikel {
   ...
   @OneToMany(fetch=FetchType.LAZY, mappedBy="artikel")
   @NotFound(action=NotFoundAction.IGNORE)
   private List<Bild> images;
}

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ForeignKey;
@Entity
class Bild {
  @ManyToOne(fetch=FetchType.LAZY)
  @org.hibernate.annotations.ForeignKey(name = "none") 
  @JoinColumn(name="idKey",  insertable=false, updatable=false, 
    foreignKey = @ForeignKey(name="none",value = ConstraintMode.NO_CONSTRAINT)) 
  private Artikel artikel;
}

它总是为“idKey”列上的表“bild”创建外键:FK_k93uxcqtc87jifh2j3rliumuj: 导入时出错:“无法添加或更新子行:外键约束失败(skateshop.bild, CONSTRAINT FK_k93uxcqtc87jifh2j3rliumuj FOREIGN KEY (idKey) REFERENCES artikel (id))”

【问题讨论】:

  • 创建 FK 的事实是一件好事。它允许检测您要导入的数据是不连贯的,并且需要修复以使您的应用程序正常工作:您有一个属于不存在的 artikel 的构建。修复您的数据,并将约束留在那里。它确保您的数据保持一致状态。
  • 感谢您的评论,我也同意。但不幸的是我不是数据的所有者,我必须使用它,我可以在导入后删除不一致的地方。所以我需要找到一种在导入期间禁用和启用外键的方法

标签: mysql hibernate jpa foreign-keys hbm2ddl


【解决方案1】:

您使用了正确的注释:

@ForeignKey(value = ConstraintMode.NO_CONSTRAINT)

它看起来像 hibernate 4.x 中的一个错误,现在已在 5.x 中修复。如果您可以升级到 Hibernate 5.x,那将解决问题。

另见JPA association without foreign key

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2016-08-14
    相关资源
    最近更新 更多