powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и локализация строк в БД
10 сообщений из 10, страница 1 из 1
Hibernate и локализация строк в БД
    #33395632
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для реализации мультиязыковости в БД было реализовано следующие: все поля с требующими локализации строками были заменены ссылками на некую таблицу-ресурс этих строк. Т.е. была введена таблица TITLE (title_id, language_id, value). К примеру, таблица STATUS (status_id, name) изменилась на STATUS (status_id, title_id). В каждый момент времени выбираются данные по параметру - language_id. Если ли какие-нибудь методы, подходы для выборки подобных данных? Теоретически можно вытаскивать все строки для всех существующих языков, но ИМХО это не совсем правильно.
...
Рейтинг: 0 / 0
Hibernate и локализация строк в БД
    #33396000
[quot Denis Popov]
Днеис, несовсем понятна проблема ... title_id, language_id вроде бы однозначно должны определять выбираемую строку, или я чего то непонимаю ...
...
Рейтинг: 0 / 0
Hibernate и локализация строк в БД
    #33396016
незаметил про Hibernate, если некритичнен контроль только на стороне AS то можно при выборе локали использовать пакетные переменные и вьюшку для текущей сессии (для оракла, с другими не работал), плюс ненадо перегенерить мэппинги, минус логика частично уходит в базу
...
Рейтинг: 0 / 0
Hibernate и локализация строк в БД
    #33396979
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл пароль .. wrote:
> незаметил про Hibernate, если некритичнен контроль только на стороне AS
> то можно при выборе локали использовать пакетные переменные и вьюшку для
> текущей сессии (для оракла, с другими не работал), плюс ненадо
> перегенерить мэппинги, минус логика частично уходит в базу

Насчет установки контекста сессии (т.е. контекста связанного с ней Connection) это мысль, спасибо.
Просто проект реализован на Oracle, а заказчик спросил, во что обойдется его расширение на другие
БД. пока что метод выбора локализованных значений из базы - один из вопросов, который хотелось бы
прояснить для принятия решения, стоит ли вообще этим заниматься.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Hibernate и локализация строк в БД
    #33397987
Grinya_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рад если помог, возможно мне придется похожее скоро делать, появятся интересные идеи - плиз кинь в ветку
...
Рейтинг: 0 / 0
Hibernate и локализация строк в БД
    #33516682
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока кроме как работы с контекстом сессии ничего путного в голокву не лезет. Т.е. это подразумевает обращение приложения не напрямую к таблицам, а в представлениям на их основе, где в нужных местах выводятся значения строк в зависимости от установленного контекста. Но это достаточно непереносимо в общем смысле: допустим, в MSSQL или Sybase или еще где найдется нечто подобное, но что делать с остальными БД, где такого может не быть? В-вторых, проблема с кешированием объектов: а вдруг поменялся язык.

Другая мысль: читать строки на всех языках в некий список, а уже на клиенте выбирать нужный, исходя из текущего языка.

Как вообще можно справиться с такой структурой?
...
Рейтинг: 0 / 0
Hibernate и локализация строк в БД
    #33517715
ppex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не мапиш Text-Title relation
Получаешь объекты title с id, а потом локализуешь
их на слое web представления, для этого В качестве
ResourceBundle нужно подсунуть Session Bean (Facade)
который бует обращаться к Text'ам
...
Рейтинг: 0 / 0
Hibernate и локализация строк в БД
    #33517809
ppex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в text делаешь composite prim key (а ... уже)
а в Title

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Id(gene .....)
Intger id;
///*** 1-1 relation с text
/// этот relation помапится на два поля
@OneToOne(optional=true)
@JoinColumns({ 
    ///   одно должно совпадать с title prim key
    @JoinColumn(name="ID", referencedColumnName="title_ID"),
    ///  второе со свойством lang
    @JoinColumn(name="lang", referencedColumnName="language_ID")
})
Text i18n;
// а это свойство с языком 
@ManyToOne
@JoinColumn(name="lang", referencedColumnName="language_ID")
Language lang;
после этого если ты прочитаешь
Title, потом установишь lang, и попросишь
хибер например merge, то он вполне может загрузить
по отношению i18n нужный тext, главное, чтобы он
эту связку сделал в кэше а, не через базу

после этого вполне можнно передавать локализованный Title на
слой представления.

но для следующего клиента трюк придётся повторить - переустановить
lang
...
Рейтинг: 0 / 0
Hibernate и локализация строк в БД
    #33522271
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще что придумал: в БД делается слой представлений (VIEW) и Hibernate подсовываются именно они, а не таблицы. Для STATUS это примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create view VI_STATUS as
select s.status_id
     , s.title_id
     , t.language_id
     , t.text name
from STATUS s
     join TEXT t on s.title_id = t.title_id


Т.е. получается декартово произведение по всем языкам. В Hibernate прописываем фильтр :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<class name="Status" table="VI_STATUS">
  <id name="id" type="int" column="status_id"/>
  <id name="name" type="string" column="name"/>
  <filter name="languageFilter" condition="language_id = :language_id"/>
</class>   

<filter-def name="languageFilter">
  <filter-param name="language_id" type="int"/>
</filter-def>

и устанавливаем его для сессии. Тоже не особенно нравится: куча представлений и предполагаемая необходимость instead-of триггеров на них, которые не везде есть - почти полноценный еще один слой логики.
...
Рейтинг: 0 / 0
Hibernate и локализация строк в БД
    #33522612
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С фильтрами выходит не все так прекрасно. Они, как я понял, налагаются именно на ту сущность, которая выбирается в данный момент. Но допустим, что есть некий класc Document, у него есть поле Status вышеописанного класса - при выборке "from Document" статусы уже фильтроваться не будут: "Hibernate3 adds the ability to pre-define filter criteria and attach those filters at both a class and a collection level .".
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и локализация строк в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]