我正在使用 Play 框架编写一个应用程序,该框架使用 JPA 注释和 Hibernate 作为包含的 Ebean ORM 持久层的一部分。我在找出与外键相关的 JPA 注释时遇到了一些麻烦。在我的 MySQL 数据库中,有一个名为 Locations 的主表,用于存储地址(街道、城市、州、邮编等)。数据库中的许多其他表以一对一或多对多的关系使用此表。问题是,当我尝试将多个字段映射到 Locations 中的 id 字段时出现错误。
例如,Docks 和 LineItems 是两个包含对 Location 的引用的模型。每个 Dock 都有一个 Location,每个 LineItem 有两个 Location:一个起点和一个终点。
所以,在 Dock 中,我有代码:
@OneToOne(optional=false)
@JoinColumn(name="loc_id")
public Location location;
在 LineItem 中,我有:
@OneToOne(optional=false)
@JoinColumn(name="origin")
public Location origin;
@OneToOne(optional=false)
@JoinColumn(name="destination")
public Location destination;
但我无法将它们全部映射到 Locations 中的 id 字段,因为 JPA 不允许我这样做:
@Id
@GeneratedValue
@OneToOne(mappedBy="location", fetch=FetchType.EAGER)
@OneToOne(mappedBy="origin", fetch=FetchType.EAGER)
@OneToOne(mappedBy="destination", fetch=FetchType.EAGER)
@Column(name="loc_id")
public Long id;
我有一种感觉,我只是走错了路。有没有更简单的方法在 JPA 中使用外键约束?我真的不想使用解决方法,比如在我的表中创建一堆额外的列,因为 Locations 确实被引用了很多。任何让我直截了当的建议将不胜感激。