Как сопоставить таблицу с локализованными названиями продуктов, используя JPA? - PullRequest
1 голос
/ 22 февраля 2011

У меня есть продукт объекта:

@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_

Мой вопрос заключается в том, как правильно настроить это отображение.Столбец mapkey в SQL-операторе приводит к SQL-Errormsg, поскольку его нет в db-таблице.

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

РЕДАКТИРОВАТЬ: Javadoc говорит: «Если постоянное полеили свойство, отличное от первичного ключа, используется в качестве ключа карты, тогда ожидается, что с ним будет связано ограничение уникальности. "

Поэтому мне интересно, могу ли я использовать Карты для этого?

1 Ответ

1 голос
/ 23 февраля 2011

Ключ Map должен быть уникальным в Java, и это отражено в JPA, ожидающей, что уникальный ключ в базе данных отобразится на ключ для Map.Если вы не можете гарантировать эту уникальность, вам нужно использовать другую структуру данных или другой ключ.

Если возможно, установите уникальный ключ в полях, которые вы хотите использовать в качестве ключа, который должен решить вашу проблему (но вам может понадобиться использовать составной ключ и, следовательно, другую структуру Map в вашем Java-коде, например, у вас может быть составной ключ mapkey + language_id, который уникален).

...