是否可以在没有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。
答案 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”)为我工作。
但要小心:在双向关系的情况下,你必须通过提及注释来注释两个字段!!!