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

bit*_*tec 4 types hibernate 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..... )
Run Code Online (Sandbox Code Playgroud)

像这样的东西.我真正想做的是 - 摆脱Polis对象中的字段重复,并在DocInfo对象中封装系列和数字字段.这对于java来说没问题,但对于Hibernate来说,我知道的唯一方法是创建ManyToOne关系并将此信息移动到另一个表(doc_info).但我需要将所有信息保存在一个表格中!

谢谢.

axt*_*avt 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;
}
Run Code Online (Sandbox Code Playgroud)

也可以看看: