Отображение таблиц i18n в JPA - PullRequest
       15

Отображение таблиц i18n в JPA

6 голосов
/ 29 августа 2011

Я пытаюсь отобразить таблицы из базы данных (из 60 таблиц) с использованием JPA.Я делаю это для многоязычного приложения, поэтому каждый фрагмент данных должен быть доступен на нескольких языках.

Моя структура таблицы базы данных примерно такая.У меня есть таблица регионов, которая связана с таблицей RegionLanguage.Таблица RegionLanguage фактически содержит описание для этого Region на разных языках.Возможно, вы захотите взглянуть на эту диаграмму:

enter image description here

Когда дело касается JPA, мне сложно отобразить ее так, чтобы потребовалось как можно меньше ассоциаций,Я пытался использовать концепцию вторичной таблицы, но в некоторых случаях она не срабатывает, поскольку это отношение @OneToMany.Предпочтительно, я думал о решении, которое сделало бы эти две таблицы похожими на один объект.

Ваша помощь приветствуется.

Заранее спасибо.

1 Ответ

0 голосов
/ 18 ноября 2012

Я не уверен, что понимаю эту странную диаграмму ... RegionLanguage имеет какой-то внешний ключ, указывающий на Region.id, я так понимаю?Если у Region есть только один столбец (как показано на «диаграмме»), вы можете просто отобразить только «RegionLanguage», и у вас будет только один объект, как вы хотели - без потери информации;).

А если серьезно, как бы вы хотели, чтобы это было сопоставлено?Хотите ли вы иметь что-то вроде этого:

class Region {
//.. the missing fields not shown in diagram
    List<String> languages;  // take only language to avoid creating separate entity for region language
}

или что-то вроде этого:

class RegionInnerJoinRegionLanguage {
// all fields from Region
// all fields from RegionLanguage
}

В любом случае вы не сказали, как остальные таблицы соединяются с вашим i18nстолы.Из вашего описания, я предполагаю, что все таблицы имеют fk для RegionLanguage.Я не уверен, для чего таблица регионов используется в общей схеме вещей.Я думаю, это просто для группировки языков ... Я представляю, что это «модели» Швейцарии (один «регион» 4 языка) ... Но что вы будете делать с языками, на которых говорят в нескольких регионах?У вас будет несколько французских, английских и т. Д. Языков (по одному для каждого региона), и все данные умножаются для каждого из этих ??

Я знаю, что вы не спрашиваете об этом ... Я просто думаю, что выУпрощенная структура данных для этого вопроса ... Настолько, что трудно угадать, чего вы действительно хотите достичь.

В любом случае, если вы хотите использовать подход списка строк, вы можете попробовать это:

  @ElementCollection
  @CollectionTable(name="RegionLanguage",
        joinColumns=@JoinColumn(name="regionID") // or whatever... it's not on your diagram.
  )
  @Column(name="langage")
  private List<String> langages;

Я до сих пор не понимаю, почему вы хотите поместить обе таблицы в одну сущность ... Если это данные только для чтения, вы можете попробовать создать представление и отобразить его -- всегда «выход»;).Но, на мой взгляд, это (на самом деле, оба) немного усложняет ситуацию - в будущем это укусит вас.Мой совет - просто использовать «простое сопоставление OneToMany».

...