Создайте / обновите ассоциацию Hibernate, просто предоставив внешний ключ - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть две спящие сущности, называемые Альфа и Бета, и Альфа имеет связь *-к-одному с Бетой.Я хотел бы создать новую запись Alpha в базе данных со ссылкой на существующую бета-версию.У меня есть основной идентификатор бета-записи, которую я хочу связать, но у меня нет фактического экземпляра.В настоящее время я храню Alpha следующим образом (используя Spring HibernateTemplate):

Alpha alpha = new Alpha();
alpha.setBeta(hibernateTemplate.load(Beta.class, betaId));
hibernateTemplate.save(alpha);

Однако я бы хотел избежать первой загрузки Beta, так как это ненужный запрос (мне не нужна alpha.getBeta () для хранения обновленной присоединенной сущности - в идеале Hibernate должен заменить ее прокси-сервером, например, с отложенной загрузкой).Поэтому я попробовал следующее (имейте в виду, что существует бета-запись с betaId):

Alpha alpha = new Alpha();
Beta beta = new Beta(betaId);
alpha.setBeta(beta);
hibernateTemplate.save(beta);

Это работает, но ведение журнала показывает, что Hibernate все еще идет и запрашивает бета-версию в бэкэнде.Еще хуже, если для этой ассоциации настроен каскад, пустая бета-запись перезапишет существующую.

Итак, есть ли способ создать или обновить такую ​​ассоциацию, просто предоставив внешний ключ и без необходимости использования Hibernate?запросить связанную таблицу?В идеале я хотел бы повторить что-то вроде этого оператора SQL:

UPDATE alpha SET beta_id = :beta_id WHERE alpha_id = :alpha_id

1 Ответ

0 голосов
/ 15 февраля 2011

HibernateTemplate.load() делегат Session.load(), поэтому он должен делать именно то, что вы хотите. Включите ведение журнала SQL, чтобы убедиться, что дополнительные запросы не выполняются.

Смотри также:

...