【问题标题】:JPA association without foreign key没有外键的 JPA 关联
【发布时间】:2014-11-20 13:23:21
【问题描述】:

是否可以在没有 JPA 在数据库中创建外键的情况下建立多对一关联?

这些表归另一个系统所有,并且是异步填充的。因此,我们不能在数据库中有 FK。仍然,几乎总是,最终的关系。

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
        @JoinColumn(name="`Order Type`", referencedColumnName = "`Order Type`", insertable = false, updatable = false),
        @JoinColumn(name="`Order No`", referencedColumnName = "`No`", insertable = false, updatable = false)
}, foreignKey = @javax.persistence.ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
private OrderHeader orderHeader;

问题在于 JPA SchemaUpdate 尝试添加 FK,即使 ConstraintMode.NO_CONSTRAINT 也是如此

[错误] o.h.t.h.SchemaUpdate - 无法添加外键约束

如果它没有使其余语句失败,我们可以忽略它

[错误] o.h.t.h.SchemaUpdate - 语句关闭后不允许操作。

我们正在使用 hibernate-entitymanager 4.3.7.Final 和 JPA 2.1。

【问题讨论】:

  • 你在使用hibernate.hbm2ddl.auto吗?如果是的话,如果你把它的值设置为none呢?
  • 我们希望为所有其他实体/表自动生成。我认为这会禁用所有人的自动生成。
  • 是的,它会为所有人禁用它。我认为不可能将其配置为仅忽略特定的类/字段。如果您确实禁用它,其他一切都正常吗?

标签: hibernate jpa


【解决方案1】:

ConstraintMode.NO_CONSTRAINT 被忽略的事实看起来像是 Hibernate 4 中的一个错误,该错误将在 5 中修复。

https://hibernate.atlassian.net/browse/HHH-8805

上面的 cmets 以及这里的这篇文章:

Multiple relationships with single mapping table without generating foreign keys by Hibernate

建议添加已弃用的(hibernate 而不是 JPA)注解

@ForeignKey( name = "none" )

关系应该有效。

【讨论】:

    【解决方案2】:

    javax.persistence.ForeignKey中添加name="none"

    这对我有用。

    foreignKey = @javax.persistence.ForeignKey(name="none",value = ConstraintMode.NO_CONSTRAINT)
    

    【讨论】:

      【解决方案3】:

      在 Hibernate 4.3.X 注释字段中,@org.hibernate.annotations.ForeignKey(name = "none") 为我工作。

      但要小心:在双向关系的情况下,你必须通过mentionad注解来注解两个字段!!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-24
        相关资源
        最近更新 更多