Hibernate хранит данные как сериализованные в одной строке, а не в отдельных строках - PullRequest
1 голос
/ 22 января 2012

Я изучаю Hibernate, и я застрял с аннотациями. У меня есть предмет POJO:

@Entity
public class Item implements Serializable {

    @Id
    @GeneratedValue
    @Column
    protected Integer id;

    @Column
    protected State state;

    @ElementCollection
    protected Map<Locale, ItemBody> localization = new EnumMap<Locale, T>(Locale.class);

    ...

}

Локаль - это перечисление из четырех пунктов:

public enum Locale {
    cs, en, de, fr, es
}

ItemBody:

public class ItemBody implements Serializable {

    @Column(length = 256)
    protected String name;

    @Column(columnDefinition = "text")
    protected String description;

    @Column(columnDefinition = "text")
    protected String excerpt;

    ...
}

Я использую его как ключ для прикрепления переводов текстов для Item.

В идеале Hibernate генерирует два класса:

 Item (id, state)
 ItemBody (item_id, localization_KEY, name, description, excerpt)

где item_id и localization_KEY образуют вместе первичный ключ.

В результате Hibernate генерирует:

 Item (id, state)
 ItemBody (item_id, localization, localization_KEY)

где локализация имеет тип Bytea и представляет собой сериализацию всех строк в ItemBody вместо перечисления всех строк. Я буду признателен за любые предложения о том, что я делаю неправильно.

Спасибо!

1 Ответ

2 голосов
/ 22 января 2012

Вы должны аннотировать ItemBody с помощью @Embeddable.В противном случае Hibernate рассматривает его как сериализуемый объект.

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