5

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

谢谢。

4

2 回答 2

10

使用@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;
}

也可以看看:

于 2011-02-20T14:46:15.823 回答
0

您需要一个 Hibernate“组件”——在 JPA 中它被称为“可嵌入”对象。component/embeddable 有两个字段,而您的实体类只有一个 component/embeddable 实例。这两列与实体的其余字段一起存在于实体表中。

于 2011-02-20T14:42:39.827 回答