#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.