我正在学习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中所有行的序列化,而不是列出所有行。对于我做错了什么,我将不胜感激。
谢谢!
答案 0 :(得分:2)
您必须使用@Embeddable
注释ItemBody。否则,Hibernate会将其视为可序列化对象。