【发布时间】:2014-11-04 07:48:39
【问题描述】:
我有两张桌子:
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...
}
问题一:
当我坚持一个部分时,我不想在补充表中插入一行,是否有任何配置或注释可以得到它?因为根据上面的Entity和配置,当我持久化一个part时,hibernate会为我生成两条insert SQL语句:
insert into part(poNo, partNo, partDesc, eccNo) values (?,?,?,?)
insert into supplement(vernderPartNo, exportHSCCode, id) vaules (?,?,?)
我想要的是,当坚持一个部分时,我没有为任何补充文件设置值,然后只有一个插入语句: 插入 part(poNo, partNo, partDesc, eccNo) 值 (?,?,?,?)
有可能吗?
问题 2:
从上面的表模式中,poNO 和partNo 是外键,也就是说,对于每个相关的部分和补充,这两个字段应该具有相同的值。但是我不知道在使用上述配置时如何将这两个列值映射到补充表。
对于Hibernate的正常操作,当它处理一个部分时,它总是会生成我上面提到的两个插入语句,而对于辅助表,它的插入语句只包含那些指定了它的表名的字段,所以对于补充一下,它的插入语句是:
insert into supplement(vernderPartNo, exportHSCCode, id) vaules (?,?,?)
那么,有没有办法让 Hibernate 生成如下插入语句:
insert into supplement(poNo, partNo, vernderPartNo, exportHSCCode, id) vaules (?,?,?,?,?)
【问题讨论】:
-
第一个问题,我之前的测试出错了,我发现使用@SecondaryTable已经可以解决了,只是没有为补充表的任何字段设置值,然后hibernate会跳过将记录插入此表。