如何在Hibernate和db模式中处理名称的国际化

时间:2013-08-16 10:34:04

标签: java mysql hibernate api internationalization

我在stackoverflow中看到了一些问题,但它们都引用了旧的答案(从2004年开始)并使用了hibernate xml映射。

我正在用Java编写API,它将返回基于算法存储在数据库中的产品。

API还将获取区域设置并决定以区域设置语言返回名称。

产品表:

product_id
name
price

我应该如何支持内部化? 我应该添加name_en name_fr等列吗?

或者我应该创建不同的表?

如何在Hibernate中的所需语言环境中返回名称?

我正在使用注释进行O / R映射

2 个答案:

答案 0 :(得分:1)

我建议添加一个包含语言前缀的列“lang”(例如en,fr,ro等)和一个“name”列,其中包含所有语言中由“,”之类的分隔符分隔的名称并解析字符串。

答案 1 :(得分:1)

我会删除name列,并使用名为localized_name的单独表创建一对多关系:

create table localized_name (
    product_key int not null,
    locale nvarchar(32) not null,
    name nvarchar(255) not null
)

我的经验是JPA,而不是Hibernate,但我猜测代码在两者中看起来相似:

public class Product {
    private Collection<LocalizedName> names;
}

在JPA中,我会在字段中添加@Size(min = 1)注释,以确保它在持久化时至少包含一个元素。