Сопоставление первичного ключа с непервичным ключом в другой таблице с другим именем

#java #xml #hibernate

#java #xml #спящий режим

Вопрос:

У меня есть объект, который я назову Foo, я хочу сопоставить Foo следующим образом:

 Foo
-FooId (PK)
-Country
-Name
-Amount
  

Проблема в том, что дизайн базы данных плохой, поэтому у меня есть две таблицы без таблицы ссылок:

 Foo (TABLE)
-FooId (PK)
-CountryId (problem child here) - COUNTRY_ID
-Name
-Amount

FooCountry (TABLE)
-CountryId (PK)
-CountryName
-ActualCountryId (I want to tie this to the "Foo" CountryId) - ACTUAL_ID
  

Я использую более старую версию hibernate и Java, поэтому у меня нет доступа к аннотациям, все это должно быть сделано с помощью простого старого XML-сопоставления.

Короче говоря, я хочу сопоставить столбец «CountryId» со столбцом «ActualCountryId» И получить на его основе полные значения внутри таблицы FooCountry (т. Е. «Страна», как в первом примере). Я совершенно уверен, что столбец «ActualCountryId» уникален, но он не закодирован таким образом в БД, это просто обычный столбец свойств.

Кто-нибудь может понять этот трюк?

Редактировать: В качестве дополнительного бонуса, как бы я определил объект «Country» в Foo? Как FooCountry?

Редактировать: это мое отображение внутри области класса Foo XML

 <key-many-to-one  name="countryId" class="FooCountry" property-ref="actualCountryId" column="COUNTRY_ID" />
  

Я также добавил имена столбцов для обеих таблиц.

Ответ №1:

Если я правильно понимаю, вы хотите иметь связь «многие к одному», но с внешним ключом к столбцу, который не является первичным ключом целевой таблицы. Это хорошо описано в справочной документации Hibernate. Вам просто нужно использовать property-ref="propertyNameFromAssociatedClass" в many-to-one элементе.

FooCountry Таблица должна быть отображена как обычный объект.

Комментарии:

1. FooCountry отображается как обычный объект, я попробую это.

2. Я получаю «Атрибут’property-ref’, используемый, но не объявленный». ошибка, отображение в файле класса неверно? Или отображение в целом?

3. Кстати, вы правы в том, что мне нужно. Конкретный тег, который я использую, — это key-many-to-one в Hib v3.0

4. Я не знаю. отредактируйте свой вопрос с отображением и трассировкой стека исключения.

5. Зачем использовать ker parimaryy-много-к-одному? Идентификатор страны не является частью идентификатора Foo . У вас должно быть просто много к одному. И Foo должен иметь свойство country типа FooCountry.