JPA和ORM的新功能,所以这个问题可能是老问题。我有以下表格:
CREATE TABLE INSTITUTION (
inst_id BIGINT PRIMARY KEY,
:
:
);
和
CREATE TABLE PERSON (
pers_id BIGINT PRIMARY KEY,
:
:
);
上述每个表与另一个表CONTACTINFO
之间存在一对多的关系CREATE TABLE CONTACTINFO (
cont_id BIGINT PRIMARY KEY,
:
:
);
在RDBMS表中,可以使用两个连接表映射关系:
JOIN_CONTACTS_PERSON ( cont_id, pers_id )
JOIN_CONTACTS_INSTITUTION ( cont_id, inst_id )
在SQL中,可以通过使用正确的连接表连接所需的表来建立关系,例如:
SELECT *
FROM Person AS p
JOIN Join_Contacts_Person AS jt ON p.pers_id = jt.pers_id
JOIN Contacts AS c ON jt.cont_id = c.cont_id;
在JPA中,一对多关系的拥有方必须是“多对多”关系。在这种情况下,联系人表。但似乎没有任何方法可以映射到多个'中的多个连接表。使用JPA注释的一面。
我的问题是:1)是否无法通过多个连接表映射双向多对一关联? ... 2)是否也无法通过两个或多个连接表映射单向多对一关系? ......和... 3)可能的解决方法是使用@ManyToMany注释进行两个单向映射,并使" one"支持每个关系的拥有方?
答案 0 :(得分:1)
但似乎没有任何方法可以使用JPA注释从'many'方面映射到多个Join Table
你有误解。您似乎认为有一个ManyToOne关联,并且您希望将其映射到多个连接表。事实并非如此。这里有两个不同的关联,每个关联都有自己的连接表:
因此,您的联系人实体将如下所示:
@Entity
public class Contact
@Id
private Long id;
@ManyToOne
@JoinTable(name = "JOIN_CONTACTS_PERSON",
joinColumns=
@JoinColumn(name="CONT_ID"),
inverseJoinColumns=
@JoinColumn(name="PERS_ID"))
private Person owningPerson;
@ManyToOne
@JoinTable(name = "JOIN_CONTACTS_INSTITUTION",
joinColumns=
@JoinColumn(name="CONT_ID"),
inverseJoinColumns=
@JoinColumn(name="INST_ID"))
private Institution owningInstitution;
// ...
}