Hibernate:如何自动在两列上映射java对象?

时间:2011-02-20 14:39:56

标签: hibernate types mappings

想象一下,我有一个共同的功能:某些文档的系列和数字(字符串和整数)。我的对象(保险单)包含有关系列和不同文档数量的信息,所以我想将这个系列和数字组合成一个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)。但我需要将所有信息保存在一个表格中!

感谢。

2 个答案:

答案 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实例。这两列与实体的其余字段一起存在于实体表中。