繁体   English   中英

如何使用JPA映射具有本地化产品名称的表?

[英]How to Map a Table with localized Product Names using JPA?

我有一个实体产品:

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "product")
@MapKeyColumn(name="locale")
public Map<String,ProductNames> getProductNames() {
    return this.productNames;
}

以及一个名为productNames的实体,其中包含产品的本地化版本

private int id;
private SkiProduct skiProduct;
private String locale;
private String text;

我尝试了@MapKeyColumn@MapKey批注。 生成的SQL如下所示:

select
     productnam0_.product_id as product4_1_,
     productnam0_.id as id1_,
     productnam0_.mapkey as mapkey1_,
     productnam0_.id as id231_0_,
     productnam0_.locale as locale231_0_,
     productnam0_.product_id as product4_231_0_,
     productnam0_.text as text231_0_
 from
     product_names productnam0_

我的问题是如何正确配置此映射。 SQL语句中的mapkey列会导致SQL-Errormsg,因为它不在db-table中。

Type (ROW(id integer, locale char(2), text varchar(255), product_id integer)) not found.

编辑: Javadoc说:“如果将非主键的持久字段或属性用作映射键,则应该具有与其相关的唯一性约束。”

所以我想知道我是否可以为此使用地图?

Map密钥在Java中应该是唯一的,这反映在JPA中,它希望数据库中的唯一密钥可以映射到Map的密钥。 如果不能保证唯一性,则需要使用另一个数据结构或另一个密钥。

如果可能,请在要用作键的字段上设置唯一键,这应该可以解决您的问题(例如,您最终可能不得不使用复合键,从而在Java代码中使用不同的Map结构。您可能有一个唯一的mapkey + language_id复合键)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM