没有外键的JPA协会

Jon*_*röm 6 hibernate jpa

是否可以在没有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;
Run Code Online (Sandbox Code Playgroud)

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

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

我们可以忽略它,如果它没有使其余的陈述失败

[error] ohthSchemaUpdate - 语句关闭后不允许任何操作.

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

Ala*_*Hay 12

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

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

对此的评论以及这篇文章的评论如下:

与单个映射表的多个关系,而不是由Hibernate生成外键

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

@ForeignKey( name = "none" )
Run Code Online (Sandbox Code Playgroud)

这种关系应该奏效.


小智 7

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

这对我有用。

foreignKey = @javax.persistence.ForeignKey(name="none",value = ConstraintMode.NO_CONSTRAINT)
Run Code Online (Sandbox Code Playgroud)