![](/img/trans.png)
[英]Custom column names for auto generated table from java map object using 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.