簡體   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