一尘不染

没有外键的JPA关联

hibernate

是否可以在不使用JPA在数据库中创建外键的情况下建立ManyToOne关联?

这些表由另一个系统拥有,并异步填充。因此,数据库中不能有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;

问题是,即使ConstraintMode.NO_CONSTRAINT,JPA SchemaUpdate也会尝试添加FK。

[错误] ohthSchemaUpdate-无法添加外键约束

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

[错误] ohthSchemaUpdate-语句关闭后不允许执行任何操作。

我们使用的是hibernate-entitymanager 4.3.7.Final和JPA 2.1。


阅读 678

收藏
2020-06-20

共1个答案

一尘不染

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

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

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

@ForeignKey( name = "none" )

关系应该起作用。

2020-06-20