2016-06-27 2 views
0

대상의 ID에 대한 추가 매핑, 우리가 에 대한 추가 매핑이 필요한 이유최대 절전 모드 @ManyToOne 예를 들면 내가 대상의 ID를위한 추가 매핑 단방향 @ManyToOne 매핑의 예를 보았다

@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; 

    ... 
} 

이해가 안 회사 ID. 누군가이 트릭을 설명 할 수 있을까요?

+0

앞에서 설명한 것처럼 회사 필드는 필요하지 않습니다. 그러나 식별자를 직접 사용하지 않고 식별자에 직접 액세스하려는 경우 유용 할 수 있습니다. getCompany(). getId() 호출. null의 경우도 있습니다. 내 지식에 추가 식별자 필드는 널리 사용되지 않습니다. – Marius

답변

0

companyId의 추가 매핑은 선택 사항이며 비즈니스 논리에 따라 다르며 JPA는 필요하지 않습니다. companyId를 표시 할 필요가있을 때만 getCompanyId()가 getCompany(). getId()보다 빠를 때 유용 할 수 있습니다.

0

나는 내 대답을 참조하고 싶습니다 - 당신의 Person -entity 및 Company -entity은 또한 당신이 단방향 OneToMany을 가질 수 있습니다 ... 어떤 종류의 ID 필요한 모든>https://stackoverflow.com/a/35549928/5909679

우선 ManyToOne에는 양방향 관계가 필요합니다.

귀하의 필드 companyId은 전혀 필요하지 않으며 귀하의 ManyToOne에는 아무런 영향을 미치지 않습니다. JoinColumn 주석이 필요합니다.이 주석은 조인 테이블에서 원하는 열 이름을 선언합니다.

당신의 Person -entity에서 : 당신의 Company -entity에서

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column 
private Integer id; 

@ManyToOne //FetchType.LAZY is by default 
@JoinColumn(name = "company_id") 
private Company company; 

: 다음과 같은 그것을 할 당신이 당신의 가입 테이블의 이름을 더 제어를하려면

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column 
private Integer id; 

@OneToMany(mappedBy = "company") 
private List<Person> persons; 

다음과 같이 선언하십시오.

@ManyToOne 
@JoinTable(name="desired_table_name", joinColumns={@JoinColumn(name="person_id", referencedColumnName="id")}, inverseJoinColumns={@JoinColumn(name="company_id", referencedColumnName="id")}) 
private Company company; 
관련 문제