Hibernate将数据序列化存储在一行而不是sepater行中

时间:2012-01-22 16:30:18

标签: java hibernate

我正在学习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);

    ...

}

Locale是四个项目的枚举:

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;

    ...
}

我用它作为附加项目文本翻译的关键。

理想情况下,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 个答案:

答案 0 :(得分:2)

您必须使用@Embeddable注释ItemBody。否则,Hibernate会将其视为可序列化对象。