JPA/Hibernate映射我有两个表:与@SecondaryTable注释
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:
当我坚持一个部分,我不想在补充表中插入一行,是否有任何配置或注释可以得到它?因为根据上述实体和配置,当我坚持一个部分,Hibernate会生成对我来说两个插入SQL语句:
insert into part(poNo, partNo, partDesc, eccNo) values (?,?,?,?)
insert into supplement(vernderPartNo, exportHSCCode, id) vaules (?,?,?)
,我想是,坚持一个部分的时候,我没有对任何申请设定值补充的,那么只有一个INSERT语句:(?,?,?,) INSERT INTO部分(PONO,PARTNO,partDesc,eccNo)值
这可能吗?
问题2:
从上面的表架构中,PONO和PARTNO是外键,这意味着,每一个相关的部分和补充,这两个场应该具有相同的值。但是我不知道如何在使用上面的配置时将这两列值映射到补充表。
对于Hibernate的正常运行,当它处理一个部分时,它总是生成两个我上面提到的insert语句,而对于secondary表,它的insert语句只包含那些指定了它的表名的字段,所以为补充,它的INSERT语句:
insert into supplement(vernderPartNo, exportHSCCode, id) vaules (?,?,?)
那么,有没有有什么办法可以让Hibernate生成如下插入语句:
insert into supplement(poNo, partNo, vernderPartNo, exportHSCCode, id) vaules (?,?,?,?,?)
对于第一个问题,我在之前的测试中犯了一个错误,并且我发现使用@SecondaryTable已经可以解决它,只是没有为补充表设置任何字段的值,然后hibernate会跳过插入记录到这个表。 – Aaron 2014-11-11 11:09:16