没有外键的JPA协会

时间:2014-11-20 13:23:21

标签: 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;

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

  
    

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

  

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

  
    

[error] o.h.t.h.SchemaUpdate - 语句关闭后不允许任何操作。

  

我们关注hibernate-entitymanager 4.3.7.Final和JPA 2.1。

3 个答案:

答案 0 :(得分:10)

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

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

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

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

建议添加不推荐使用的(hibernate而不是JPA)注释

@ForeignKey( name = "none" )

这种关系应该有效。

答案 1 :(得分:4)

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

这对我有用。

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

答案 2 :(得分:1)

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

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