JPA 多对多和 mappedBY
Posted
技术标签:
【中文标题】JPA 多对多和 mappedBY【英文标题】:JPA ManyToMany and mappedBY 【发布时间】:2015-05-22 14:43:41 【问题描述】:我完全理解@OneToMany、@ManyToOne 和@ManyToMany。但是 mappedBy = "some collection or class" 被混淆了。
据我了解,很多部分始终是拥有方。例如,
@Entity
@Table(name = "company")
public class CompanyEntity implements Serializable
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idcompany")
private Integer idcompany;
@Basic(optional = false)
@Column(name = "name")
private String name;
@Basic(optional = false)
@Column(name = "address")
private String address;
@OneToMany
private Collection<EmployeeEnity> employeeEnity
这是说一家公司可以有很多员工。一个是公司,许多是员工。
但是,@ManyToMany 我们仍然有相反的一面。这是我不明白的。 @ManyToMany 只是表示中间有一张桌子,那么如何确定逆和所有者?
我知道 mappedBy 是强制性的,但选择放置它的位置让我感到困惑。
【问题讨论】:
【参考方案1】:对于双向 OneToMany,多方必须是所有者方。
对于多对多,您可以选择:您决定哪一边是所有者一边,哪一边是反面。
请注意,在您的示例中,关联是单向的,因此唯一的一侧(一侧)显然是所有者一侧,或者关联是双向的,因此映射是不正确的,因为一侧必须是相反的一面,因此应该有一个mappedBy
属性:
@OneToMany(mappedBy = "company")
private Collection<EmployeeEntity> employees;
【讨论】:
我有一个选择,是的,它正在做出这个选择。例如:一个公司可以有很多客户,一个客户可以有很多公司。谁是独一无二的? 没有人是独一无二的。 Unicity 与您的问题无关。您可以选择让公司成为所有者或客户。你决定。以上是关于JPA 多对多和 mappedBY的主要内容,如果未能解决你的问题,请参考以下文章