这更像是一个普遍的“理解”问题,而不是一个特定的Senario问题。
我一直在寻找JPA将表格映射到一起的方式,并发现这里有两个似乎以不同方式工作的例子。
有一个使用@JoinTable的一组Phone对象通过STUDENT_ID将STUDENT_PHONE加入STUDENT
另一个有一套StockDailyRecord,但似乎只是使用mappedby stock而在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;
}
答案 0 :(得分:1)
方法#2:
它使用额外的列来构建OneToMany关系。此列是另一个表的外键列。在构建关系之前,如果需要将这些数据添加到数据库,则需要将此外键列定义为可空。这会破坏效率,无法提供规范化架构。
方法#1:
它使用第三个表,是在关系数据库中存储数据并提供规范化模式的有效方法。因此,如果在构建关系之前需要存在数据,那么最好使用这种方法。