我在stackoverflow中看到了一些问题,但它们都引用了旧的答案(从2004年开始)并使用了hibernate xml映射。
我正在用Java编写API,它将返回基于算法存储在数据库中的产品。
API还将获取区域设置并决定以区域设置语言返回名称。
产品表:
product_id
name
price
我应该如何支持内部化?
我应该添加name_en
name_fr
等列吗?
或者我应该创建不同的表?
如何在Hibernate中的所需语言环境中返回名称?
我正在使用注释进行O / R映射
答案 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)
注释,以确保它在持久化时至少包含一个元素。