gpt4 book ai didi

java - 使用可连接的两个表的 JPA 映射以及何时使用可连接

转载 作者:行者123 更新时间:2023-12-01 13:09:54 27 4
gpt4 key购买 nike

这更多的是一个一般性的“理解”问题,而不是一个具体的场景问题。

我一直在研究 JPA 将表映射在一起的方式,并在这里发现了两个似乎以不同方式工作的示例。

其中有一组 Phone 对象,使用 @JoinTable 将 STUDENT_PHONE 按 STUDENT_ID 连接到 STUDENT

另一个有一组 StockDailyRecord,但似乎只使用由 stock 映射的,并且在 stock_detail 表对象中具有 @PrimaryKeyJoinColumn 注释。

只是想了解哪种方法是首选方法以及为什么?

方法一:

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

最佳答案

方法#2:

它使用额外的列来构建 OneToMany 关系。该列是另一个表的外键列。在构建关系之前如果需要将这些数据添加到数据库中,则需要将此外键列定义为可空。这会破坏效率并且无法提供规范化的模式。

方法#1:

它使用第三个表,是在关系数据库中存储数据的有效方法,并提供规范化模式。因此,如果在构建关系之前需要存在数据,那么在可能的情况下最好使用这种方法。

关于java - 使用可连接的两个表的 JPA 映射以及何时使用可连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22967097/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com