首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JPA存储Map<Locale、String>

问使用JPA存储Map<Locale、String>
EN

Stack Overflow用户
提问于 2013-12-26 16:16:31
回答 1查看 1.3K关注 0票数 4

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

请注意,许多实体都需要这种属性(并且每个实体需要多个这样的属性)。因此,解决方案需要易于复制,而不是将大量代码复制粘贴到每个实体。

为了说明,应用程序将需要存储以下内容的数据:

​

(请注意,相同的项目是用五种语言编写的)

EN

回答 1

Stack Overflow用户

发布于 2013-12-26 22:29:57

这是一个相当幼稚的实现,您需要根据自己的情况对其进行适当的调整。但是,为了使这个实现可重用,您需要一个包含语言->文本映射的可嵌入类。然后使用hashmap围绕它构建一个实体,因为您将需要一个唯一ID之类的东西。

代码语言:javascript
复制
@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.
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20781500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档