Я пытаюсь получить реализацию JPA простого подхода к интернационализации. Я хочу иметь таблицу переведенных строк, которую я могу ссылаться в нескольких полях в нескольких таблицах. Таким образом, все текстовые вхождения во всех таблицах будут заменены ссылкой на таблицу переведенных строк. В сочетании с идентификатором языка это даст уникальную строку в таблице переведенных строк для этого конкретного поля. Например, рассмотрим схему, которая имеет сущности курса и модуль следующим образом: -
Курс int course_id, int name, int description
Модуль int module_id, int name
Курс. имя, курс .description и module.name все ссылаются на поле id таблицы переведенных строк: -
TranslatedString int id, Строковый язык, Содержимое строки
Это все кажется достаточно простым. Я получаю одну таблицу для всех строк, которые могут быть интернационализированы, и эта таблица используется во всех других таблицах.
Как я могу это сделать в JPA, используя eclipselink 2.4?
Я посмотрел на встроенный ElementCollection, ala this... JPA 2.0: сопоставление карты - это не совсем то, что я 'm after cos, похоже, что он привязывает таблицу переведенных строк к pk принадлежащей ему таблицы. Это означает, что я могу иметь только одно переводимое поле строки для сущности (если я не добавлю новые столбцы соединения в таблицу переводимых строк, которая победит точку, ее противоположность тому, что я пытаюсь сделать). Я также не понимаю, как это будет работать через entites, предположительно, идентификатор каждого объекта должен будет использовать широкую последовательность базы данных, чтобы обеспечить уникальность таблицы переводимых строк.
Кстати, я попробовал пример, как это изложено в этой ссылке, и это не сработало для меня - как только у объекта была добавлена карта локализованной строки, ее сохранение заставило клиентскую сторону бомбить, но на сервере не было очевидной ошибки стороне и ничего не сохранилось в БД: S
Я был вокруг домов на этом около 9 часов до сих пор, я посмотрел на эту интернационализацию с Hibernate, которая, похоже, пытается сделать то же самое, что и ссылка выше (без определения таблиц трудно понять, что он достиг). Любая помощь будет с благодарностью достигнута в этот момент...
Изменить 1 - re AMS anwser ниже, я не уверен, что действительно решает проблему. В своем примере он оставляет сохранение текста описания в каком-то другом процессе. Идея такого подхода заключается в том, что объект entity принимает текст и локаль, и это (как-то!) Заканчивается в таблице переводимых строк. В первой ссылке, которую я дал, парень пытается сделать это, используя встроенную карту, которую я считаю правильным. У его пути есть две проблемы: одна, похоже, не работает! и два, если это сработало, оно хранит FK во встроенной таблице, а не наоборот. Думаю, я не могу заставить его работать, поэтому я не вижу точно, как он сохраняется. Я подозреваю, что правильный подход заканчивается ссылкой на карту вместо каждого текста, который нуждается в переводе (карта - это локаль- > контент), но я не вижу, как это сделать таким образом, чтобы допускать несколько карт в одном объекте (без соответствующих столбцов в таблице переводимых строк)...