Hibernate: как автоматически отобразить Java-объект на два столбца? - PullRequest
3 голосов
/ 20 февраля 2011

Представьте, что у меня есть одна общая функциональность: серия и номер (строка и целое число) какого-либо документа. Мой объект (страховой полис) содержит информацию о серии и количестве различных документов, поэтому я хотел бы сгруппировать эту серию и номер в один объект 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 ]

7 голосов
/ 20 февраля 2011

Используйте @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;
}

См. Также:

0 голосов
/ 20 февраля 2011

Требуется «компонент» Hibernate, который в JPA называется «встраиваемым» объектом. Компонент / embeddable имеет два поля, а у вашего класса сущностей есть только один экземпляр компонента / embeddable. Два столбца находятся в таблице сущностей вместе с остальными полями сущности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...