JPA无外键关联

12

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

这些表归另一个系统所有,并以异步方式填充。因此,我们不能在数据库中有外键。但几乎总是存在关系。

@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。我们可以忽略这个问题,但如果不解决,它会导致其他语句执行失败。我们使用的是hibernate-entitymanager 4.3.7.Final和JPA 2.1版本。出现以下报错信息:[error] o.h.t.h.SchemaUpdate - Cannot add foreign key constraint 和 [error] o.h.t.h.SchemaUpdate - No operations allowed after statement closed.

你是否正在使用 hibernate.hbm2ddl.auto?如果是,如果将其值设置为 none 会发生什么? - Predrag Maric
我们希望为所有其他实体/表自动生成。我认为这将禁用所有自动生成。 - Jonas Elfström
是的,这将会禁用所有内容。我认为不可能配置它仅忽略特定的类/字段。如果您禁用它,其他所有功能是否都能正常工作? - Predrag Maric
3个回答

16

8
javax.persistence.ForeignKey中添加name="none",这对我起作用了。
foreignKey = @javax.persistence.ForeignKey(name="none",value = ConstraintMode.NO_CONSTRAINT)

2

Hibernate 4.3.X中使用@org.hibernate.annotations.ForeignKey(name = "none")的注解字段对我有用。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接