gpt4 book ai didi

java - 使用 @SecondaryTable 注释的 JPA/Hibernate 映射

转载 作者:行者123 更新时间:2023-11-29 23:28:52 26 4
gpt4 key购买 nike

我有两个表:

part {
int id; --> primary key, auto generated
varchar poNo;
varchar partNo;
varchar partDesc;
varchar eccNo;
...
}

supplement {
int id; --> primary key
varchar poNo; --> foreign key
varchar partNo; --> foreign key
varchar venderPartNo;
varchar exportHSCCode;
...
}

我定义了一个实体如下:

@Entity
@Table(name="part")
@SecondaryTable(name="supplement", pkJoinColumns ={@PrimaryKeyJoinColumn="id"})
public class Part{
@Id
@GeneratedValue
private Integer id;

private String poNo;

private String partNo;

private String partDesc;

private String eccNo;
@Column(table="supplement")
private String vernderPartNo;
@Column(table="supplement")
private String exportHSCCode;
...
getter and setter...
}

问题1:

当我保留一部分时,我不想在补充表中插入一行,是否有任何配置或注释可以获取它?因为根据上面的Entity和配置,当我持久化一部分时,hibernate会为我生成两条插入SQL语句:

insert into part(poNo, partNo, partDesc, eccNo) values (?,?,?,?)
insert into supplement(vernderPartNo, exportHSCCode, id) vaules (?,?,?)

我想要的是,当持久化一部分时,我没有为任何补充字段设置值,然后只设置一个插入语句: 插入到part(poNo,partNo,partDesc,eccNo)值(?,?,?,?)

这可能吗?

问题2:

从上面的表架构中,poNO和partNo是外键,这意味着,对于每个相关的part和supplement,这两个字段应该具有相同的值。但我不知道在使用上述配置时如何将这两列值映射到补充表。

对于Hibernate的正常操作来说,当它处理一个部分时,它总是会生成我上面提到的两条插入语句,而对于辅助表,它的插入语句只包含那些指定了它的表名的字段,所以对于补充一下,它的插入语句是:

insert into supplement(vernderPartNo, exportHSCCode, id) vaules (?,?,?)

那么,有没有办法让Hibernate生成如下的插入语句:

insert into supplement(poNo, partNo, vernderPartNo, exportHSCCode, id) vaules (?,?,?,?,?)

最佳答案

使用@SecondaryTable映射两个表

您可以在主表上使用如下所示

@Table(name = "Table_Primary", schema = "schema ")
@SecondaryTable(name = "Table_Secondary", schema = "schema ", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "Table_Primary_Column", referencedColumnName = "Table_Secondary_Column")})

关于java - 使用 @SecondaryTable 注释的 JPA/Hibernate 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26730047/

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