使用JPA注解存储Map<Locale,String>属性的最简单方法是什么?我正在开发的应用程序需要存储多语言文本-即(本质上)相同的文本,但是是用多种语言编写的。
请注意,许多实体都需要这种属性(并且每个实体需要多个这样的属性)。因此,解决方案需要易于复制,而不是将大量代码复制粘贴到每个实体。
为了说明,应用程序将需要存储以下内容的数据:

(请注意,相同的项目是用五种语言编写的)
发布于 2013-12-26 22:29:57
这是一个相当幼稚的实现,您需要根据自己的情况对其进行适当的调整。但是,为了使这个实现可重用,您需要一个包含语言->文本映射的可嵌入类。然后使用hashmap围绕它构建一个实体,因为您将需要一个唯一ID之类的东西。
@Embeddable
public class LocalizedString {
private String language;
private String text;
public LocalizedString() {}
public LocalizedString(String language, String text) {
this.language = language;
this.text = text;
}
// auto-generated getters, setters, hashCode(), equals(), etc.
}
@Entity
@Table(schema = "app", name = "mling_str")
public class MultilingualString {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "string_id")
private long id;
@ElementCollection(fetch = FetchType.EAGER)
@MapKey(name = "language")
@CollectionTable(schema = "app", name = "ming_str_map",
joinColumns = @JoinColumn(name = "string_id"))
private Map<String, LocalizedString> map = new HashMap<String, LocalizedString>();
public MultilingualString() {}
public MultilingualString(String lang, String text) {
addText(lang, text);
}
public void addText(String lang, String text) {
map.put(lang, new LocalizedString(lang, text));
}
public String getText(String lang) {
if (map.containsKey(lang)) {
return map.get(lang).getText();
}
return null;
}
// auto-generated getters, setters, hashCode(), equals(), etc.
}https://stackoverflow.com/questions/20781500
复制相似问题