2010-07-15 3 views
0

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

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

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, а также, если это целесообразно или не делать этого. Неужели я ошибаюсь?

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

+0

Можете ли вы опубликовать пример определения таблицы? вы имеете в виду, что эти две таблицы используют одно и то же определение ключа (т.е. обе таблицы имеют составной первичный ключ 'id' и' version', но это отдельные объекты, которые, как правило, имеют один и тот же тип ключа), или что обе таблицы относятся к третьей таблице, которая определяет этот «ключевой» объект? –

+0

Я не могу опубликовать свой код по проприетарным причинам, и писать пример займет слишком много времени.Но да, ваша первая возможность верна - обе таблицы имеют составные первичные ключи id/version, и мне нужны некоторые данные из обеих таблиц, поэтому мне нужно присоединиться к составной PK таблицы A (id/version) к составной PK таблица B (id/версия). Поэтому я использовал тот же класс составных ключей, что и идентификатор для обоих объектов. Это был не мой вопрос выше, но сейчас я испытываю большие трудности с тем, чтобы DAO работал, много ошибок «не удалось устранить» ... может быть, тема другой публикации. – WhyGeeEx

ответ

1

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

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

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

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

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

+0

Спасибо за совет, я ценю это ... похоже, что Hibernate замечателен, когда вы полностью контролируете прекрасно спроектированный env, чего многие не делают. Я также видел учебник, на который вы ссылаетесь, я не видел, чтобы он обращался к этому. Я не думаю, что я неправильно понял ключевой объект, но, возможно, мой вопрос был недостаточно ясным. Я пишу файлы сопоставления для всех классов, привязанных непосредственно к таблицам БД. Моя проблема/вопрос заключалась в том, что, поскольку этот ключевой класс НЕ привязан к какой-либо таблице, он может/должен быть сгенерирован с использованием файла hbm, а мотивация - лучшая организация проекта и согласованность. – WhyGeeEx

 Смежные вопросы

  • Нет связанных вопросов^_^