我看到了单向@ManyToOne映射的示例,其中包含目标id的附加映射,例如:
@Entity
public class Person {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "company_id")
private Company company;
@Column(name = "company_id", insertable = false, updatable = false)
private Long companyId;
...
}
我不明白为什么我们需要 companyId 的其他映射。有人可以解释这个伎俩吗?
答案 0 :(得分:0)
companyId的附加映射是可选的,取决于您的业务逻辑,而不是JPA的要求。 当你只需要显示companyId然后getCompanyId()将比getCompany()。getId()更快时,这可能是好事。
答案 1 :(得分:0)
我想参考我的答案 - > https://stackoverflow.com/a/35549928/5909679
首先,您的Person
- 实体和Company
- 实体需要某种ID
...此外,您可以拥有单向OneToMany
但是{{} {1}}需要双向关系。
根本不需要您的字段ManyToOne
,这对您的companyId
不会产生任何影响。只需要ManyToOne
注释,它在连接表中声明您想要的列名。这样做:
在JoinColumn
- 实体中:
Person
在@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Integer id;
@ManyToOne //FetchType.LAZY is by default
@JoinColumn(name = "company_id")
private Company company;
- 实体中:
Company
如果您希望更多地控制join-table的命名,请将其声明如下:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Integer id;
@OneToMany(mappedBy = "company")
private List<Person> persons;