Создание объекта составного ключа Hibernate из файла hbm - PullRequest
0 голосов
/ 15 июля 2010

(круглые скобки :) Я новичок в Hibernate, немного расстроенный накладными расходами простого соединения, которое я мог написать за 15 секунд в SQL.(End rant)

Ситуация такова: у меня есть 2 таблицы, которые содержат один и тот же составной первичный ключ - давайте назовем столбцы в обеих таблицах «ID» и «Version».Мне нужны данные об определенном идентификаторе / версии из обеих таблиц, поэтому

select a.xxx, b.yyy 
from tableA a, tableB b
where a.ID = b.ID
    and a.Version = b.Version
    and .....

Плохой дизайн таблицы, но не в моих руках.

В Hibernate мое онлайн-исследование предлагает создать отдельный составнойключевой класс, который будет использоваться таблицами совместно с объектом A, содержащим объект B, и взаимно-однозначным отображением между ними в файле hbm A.

В моем проекте все мои объекты данных Hibernate генерируютсяс файлами hbm и находится там же.Поэтому я хотел бы знать, смогу ли я создать этот составной ключевой объект, также используя файл hbm, и сохранить его вместе с братьями.Проблема в том, что он не сопоставляется ни с какой таблицей , в частности (или, можно сказать, он сопоставляется с 2 таблицами).Я пытаюсь определить, возможно ли создать этот класс составного ключа с помощью файла hbm, а также целесообразно или нет.Я поступаю неправильно?

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

1 Ответ

1 голос
/ 15 июля 2010

Я думаю, вы неправильно поняли этот ключевой объект. Вы должны написать класс Java, который представляет этот ключ, состоящий из идентификатора и версии в этом случае. Затем вы используете этот класс в качестве составного типа первичного ключа. Вы ничего не видели об этом классе в базе данных. Он используется вами и hibernate для идентификации экземпляра.

Отношение один к одному используется для синхронизации первичных ключей. Один объект должен ссылаться на другой и получит свой первичный ключ от этого.

Документация:

Большинство людей, которые переходят с SQL на Hibernate, разочарованы, потому что они пытаются работать с Hibernate, как с SQL. Тогда они от этого не выигрывают, а получают дополнительные накладные расходы.

Итак, вот мой короткий совет: Вы не должны больше думать в таблицах. Если вы не пишете файлы сопоставления, просто забудьте таблицы . Думайте только в классах, объектах и ​​объектно-ориентированных структурах. Не выполняйте запросы для всего, что вы хотите «сделать в базе данных». В большинстве транзакций вы сначала выполняете один запрос, затем перемещаетесь по свойствам, используя ленивую загрузку (которую ваш код не распознает). Код, который реализует реальную логику, больше ничего не знает о базе данных. Тогда становится интересно работать с hibernate.

...