이것은 특정 senario 질문보다는 일반적인 '이해'질문에 가깝습니다.두 테이블의 JPA 매핑 및 조인트 사용 가능시기
JPA가 테이블을 함께 매핑하는 방식을 살펴 보았으며 여기서 여러 가지 방식으로 작동하는 두 가지 예제를 발견했습니다.
하나는 전화 개체의 집합 STUDENT_ID
다른를하여 학생에 STUDENT_PHONE 가입 @JoinTable 사용이 StockDailyRecord의 설정을 가지고 있지만 단지 mappedby 주식을 사용하는 것과 stock_detail 테이블 오브젝트의 @PrimaryKeyJoinColumn 주석이 .
어떤 방법이 선호되는 방식인지 그리고 왜 그 이유가 무엇인지 이해하기 만하면됩니까?
방법 1 :
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "STUDENT_PHONE", joinColumns = { @JoinColumn(name = "STUDENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "PHONE_ID") })
public Set<Phone> getStudentPhoneNumbers() {
return this.studentPhoneNumbers;
}
방법 2 :
@Table(name = "stock", catalog = "mkyongdb", uniqueConstraints = {
@UniqueConstraint(columnNames = "STOCK_NAME"),
@UniqueConstraint(columnNames = "STOCK_CODE") })
@OneToMany(fetch = FetchType.LAZY, mappedBy = "stock")
public Set<StockDailyRecord> getStockDailyRecords() {
return this.stockDailyRecords;
}
@Table(name = "stock_detail", catalog = "mkyongdb")
@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn
public Stock getStock() {
return this.stock;
}
감사합니다. 따라서 방법 1은 학생 -> 학생 _ 전화 <- 전화입니까? 방법 # 2는 STOCK-> STOCK_DETAIL (fk stock_id)입니까? 방법 1은 ManyToMany에 더 이상 가입하지 않습니까? – Casper
예. ManyToOne과 OneToMany에는 Method # 1과 # 2를 모두 사용할 수 있습니다. 그러나 방법 # 1은 ManyToMany에 대한 유일한 옵션입니다. – Jay