Hibernate @ManyToOne和目标id的附加映射

时间:2016-06-27 07:50:23

标签: hibernate jpa

我看到了单向@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 的其他映射。有人可以解释这个伎俩吗?

2 个答案:

答案 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;