2011-02-22 212 views
2

这是用于传统数据库。即使子表列包含父表的PK,此关系中的两个数据库表也没有外键约束。JPA是否支持数据库中没有外键约束的实体之间的@OneToMany映射?

如果子表在相应列上没有外键约束,JPA是否支持@OneToMany映射(无论是双向还是单向)?

+0

在这个遗留代码中,我使用的是OpenJPA 1.0.1,为了使OneToMany能够工作,我必须急切地加载子实体。我不知道这是由于缺少外键约束还是openjpa 1.0.1只是脑死亡而造成的。 – 2011-02-23 18:11:10

+0

http://stackoverflow.com/questions/27040735/jpa-association-without-foreign-key/27042157 – 2014-11-20 16:21:05

回答

1

简短回答:

长:JPA实际上是否关心外键如果数据库已经存在?如果我们将创建数据库模式的任务留给JPA提供者,它将创建外键,这很好。但是,如果JPA在现有数据库上工作,它只关心是否存在用于生成正确联接的外键和主键列。外键不是必需的。

事实上,当我和Hibernate一起工作时,我们已经有一个使用short类型的外键列指向int主键在另一个表上的遗留数据库。不可能有任何外键,但只要我们没有使用validatehbm2ddl选项,作为J​​PA提供程序的Hibernate工作得很好,忽略了类型不匹配,更不用说缺少外键了。

+1

@ org.hibernate.annotations.ForeignKey(name =“none”)//直到这个bug使用它https:/ /hibernate.atlassian.net/browse/HHH-8805已修复。 – 2014-11-20 16:20:26

+0

@JonasElfström,与@ org.hibernate.annotations.ForeignKey办法(NAME = “无”)不会对Hibernate 4.3.9 – 2016-06-17 09:44:39

+0

工作另外:与 在Hibernate 4.3.X注释字段@ org.hibernate.annotations.ForeignKey (名称=“无”),以免为我工作。 但要小心:在双向关系的情况下,您必须通过意见标注注释**两个字段**! – 2016-06-17 12:37:39