@OneToMany没有反关系,也没有联接表?
这与“休眠@OneToMany没有单独的连接表”类似,因为我需要一个没有连接表的@OneToMany关系。但是,我也不想定义反向关系。删除反向似乎会导致自动生成连接表...有没有解决方法?
这与“休眠@OneToMany没有单独的连接表”类似,因为我需要一个没有连接表的@OneToMany关系。但是,我也不想定义反向关系。删除反向似乎会导致自动生成连接表...有没有解决方法?
在 JPA 2.0+ 中,您可以使用@JoinColumn来避免生成联接表。
试试吧。
@OneToMany
@JoinColumn(name="COLUMN_NAME")
更新
上面提供的信息是从 EJB 3.0 o'reilly book 中提取的(查找 @JoinColumn 注释引用了 PHONE 表中CUSTOMER_ID列)。但是,普通 JPA 1.0 规范不支持此功能。它说的是
单向一对多关系可以使用一对多外键映射来实现,但是,此版本中不需要此类支持。希望对一对多关系使用外键映射策略的应用程序应使这些关系双向化,以确保可移植性
因此,在1.0中,它是特定于供应商的实现(这是有道理的,作者在JBoss工作 - 休眠背后的红帽分案)
但它得到了JPA 2.0实现的支持。
如果联接用于使用外键映射策略的单向 OneToMany 映射,则外键位于目标实体的表中。
JPA 1.0 规范不支持没有联接表的单向一对多映射。
在标准 JPA 1.0 中不允许在 a 上使用 a(仅在 、 或 ) 上。不过,它在JPA 2.0中。JoinColumn
OneToMany
OneToOne
ManyToOne
ManyToMany
根据 JPA 1.0 规范:
2.1.8.5.1 单向一对多关系
以下映射默认值适用:
实体 A 映射到名为 的表。实体 B 映射到名为 的表。有一个名为(所有者名称优先)的联接表。此联接表有两个外键列。一个外键列引用表,并且与表 的主键具有相同的类型。此外键列的名称形成为以下内容的串联:实体 A 的名称;"_";表中主键列的名称。另一个外键列引用表 B,其类型与表的主键相同,并且存在唯一键约束。此外键列的名称形成为以下内容的串联:实体 A 的关系属性或字段的名称;"_";表中主键列的名称。
A
B
A_B
A
A
A
B
B
总而言之,如果您不想要连接表(和完全的读/写支持),并且仍然希望符合JPA,请将关联设为双向(带有一侧)。inverse
下面的wiki书籍链接讨论了一个技巧(将目标表映射为连接表)来“解决”问题,但这仅适用于读取,写入将不起作用。