想象一下,我有一个共同的功能:某些文档的系列和数字(字符串和整数)。我的对象(保险单)包含有关系列和不同文档数量的信息,所以我想将这个系列和数字组合成一个java对象,让hibernate在同一个表中的每个对象上存储两个字段。
参见示例:
class Polis {
private DocInfo kaskoNumber;
private DocInfo osagoNumber;
private DocInfo tsNumber;
}
class DocInfo {
private String series;
private Integer number;
}
table:
polis(kaskoSeries varchar2,
kaskoNumber numeric,
osagoSeries varchar2,
osagoNumber numeric..... )
像这样的东西。我真正想做的是 - 摆脱Polis对象中的字段重复,并在DocInfo对象中封装系列和数字字段。对于java来说这是好的,但对于Hibernate,我知道的唯一方法是创建ManyToOne关系并将此信息移动到另一个表(doc_info)。但我需要将所有信息保存在一个表格中!
感谢。
答案 0 :(得分:7)
使用@Embeddable
和@AttributeOverrides
:
@Entity
class Polis {
@AttributeOverrides( {
@AttributeOverride(name="series", column = @Column(name="kaskoSeries") ),
@AttributeOverride(name="number", column = @Column(name="kaskoNumber") )
})
private DocInfo kaskoNumber;
@AttributeOverrides( {
@AttributeOverride(name="series", column = @Column(name="osagoSeries") ),
@AttributeOverride(name="number", column = @Column(name="osagoNumber") )
})
private DocInfo osagoNumber;
...
}
@Embeddable
class DocInfo {
private String series;
private Integer number;
}
另见:
答案 1 :(得分:0)
你想要一个Hibernate“组件” - 在JPA中称为“可嵌入”对象。组件/ embeddable有两个字段,您的实体类只有一个组件/ embeddable实例。这两列与实体的其余字段一起存在于实体表中。