Java 使用和何时使用jointable的两个表的JPA映射

Java 使用和何时使用jointable的两个表的JPA映射,java,hibernate,jpa,jointable,Java,Hibernate,Jpa,Jointable,这更像是一个一般性的“理解”问题,而不是一个具体的塞纳里奥问题 我一直在研究JPA将表映射到一起的方式,在这里发现了两个似乎以不同方式工作的示例 其中一个有一组电话对象,使用@JoinTable通过学生ID将学生电话连接到学生 另一个有一组StockDailyRecord,但似乎只使用mappedby stock,并且stock_detail表对象中有@PrimaryKeyJoinColumn注释 只是试图了解哪种方法是首选的方法以及为什么 方法1: @OneToMany(cascade = C

这更像是一个一般性的“理解”问题,而不是一个具体的塞纳里奥问题

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

其中一个有一组电话对象,使用@JoinTable通过学生ID将学生电话连接到学生

另一个有一组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;
}
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name=“STUDENT\u PHONE”,joinColumns={@JoinColumn(name=“STUDENT\u ID”)},inverseJoinColumns={@JoinColumn(name=“PHONE\u ID”)})
公共设置GetStudentPhoneNumber(){
返回此.studentphonenumber;
}
方法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;
}
@Table(name=“stock”,catalog=“mkyongdb”,uniqueConstraints={
@UniqueConstraint(columnNames=“股票名称”),
@UniqueConstraint(columnNames=“股票代码”)}
@OneToMany(fetch=FetchType.LAZY,mappedBy=“stock”)
公共集getStockDailyRecords(){
返回此.StockDailRecords;
}
@表(name=“stock_detail”,catalog=“mkyongdb”)
@OneToOne(fetch=FetchType.LAZY)
@PrimaryKeyJoinColumn
公开股{
退回这只股票;
}
方法#2:

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

方法#1:

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

谢谢。那么方法1是更多学生->学生电话库存详细信息(fk库存id)?那么,方法#1不是更多的多个联接吗?是的。方法#1和#2均可用于多通和单通。但方法1是许多人的唯一选择。