gpt4 book ai didi

java - 使用 JPA 存储 Map

转载 作者:搜寻专家 更新时间:2023-11-01 03:23:51 25 4
gpt4 key购买 nike

存储 Map<Locale,String> 的最简单方法是什么?使用 JPA 注释的属性?我正在处理的应用程序需要存储多语言文本——即(本质上)相同的文本,但用多种语言编写。

请注意,大量实体需要这种属性(每个实体需要多个此类属性)。因此,该解决方案需要易于复制,而不是将代码块和代码块复制粘贴到每个实体。

举例来说,应用程序需要为这些东西存储数据: enter image description here

(注意同一个项目是用五种语言写的)

最佳答案

这是一个非常天真的实现,您需要根据您的情况适本地调整它。但是,要使此实现可重用,您需要一个包含语言 -> 文本映射的可嵌入类。然后使用散列图围绕它构建一个实体,因为您将需要唯一 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.
}

关于java - 使用 JPA 存储 Map<Locale,String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20781500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com