有一个实体类'A'(应该是一个人),还有另一个实体类'B'(应该是合同)。
实体'A'与类'B'有@OneToMany
的关系(一个人可以签署很多合同)。实体'B'与类'A'的关系@OneToMany
(合同可以让很多人签名)。
在这种情况下,数据库中会有2 JoinTable
,但实际上它们两者都是相同的。
无论如何我只使用One JoinTable制作它们吗?
tnx任何帮助!
答案 0 :(得分:1)
通过使用两个@OneToMany,没有JoinTable。 你可以像这样使用@ManyToMany
@ManyToMany
@JoinTable(
name="AB",
joinColumns=@JoinColumn(name="A_ID", referencedColumnName="ID"),
inverseJoinColumns=@JoinColumn(name="B_ID", referencedColumnName="ID"))
private List<B> bS;
答案 1 :(得分:1)
看起来像我的@ManyToMany关系...
类Person中的
@ManyToMany
@JoinTable(name="PERS_CONTRACTS")
public Set<Contract> getContracts() { return contracts; }
合同中的
@ManyToMany(mappedBy="contracts")
public Set<Person> getSigners() { return signers; }
答案 2 :(得分:1)
它是一种多对多关系。所以它只需要一个联结表,如数据库中的person_contract。它将包含以下列:
其中person_id和amp; contract_id将是一个复合唯一键。
在休眠中它将是: 1.在人员表中
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "person_contract ", joinColumns = {
@JoinColumn(name = "person_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "contract_id",
nullable = false, updatable = false) })
public Set<Contract> contracts;
在合约表
中 @ManyToMany(fetch = FetchType.LAZY, mappedBy = "contracts")
public Set<Person> persons;
答案 3 :(得分:1)
<强>情况:强>
您在这里使事情变得复杂,您的实体之间的适当关系将是ManyToMany
,因为:
person
可以签署许多 contracts
。contract
可以签署persons
。此关系中的一个JoinTable
足以为您提供所有要求的详细信息:
Contract
。Contracts
签署了Person
。<强>映射:强>
所以你的映射将是这样的:
在Person
课程中:
@ManyToMany(mappedBy = "persons")
private Set<Contract> contracts= new HashSet<Contract>();
在你的Contract
课程中:
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "PERSONS_CONTRACTS",
joinColumns = @JoinColumn(name = "CONTRACT_ID"),
inverseJoinColumns = @JoinColumn(name = "PERSON_ID")
)
private Set<Person> persons= new HashSet<Person>();
您可以查看Hibernate Many-to-Many Association Annotations Example以获取更多详细信息。