2009-11-17 1 views
1

Подумайте, 2 сущности OneToOne сопоставлены. Человек и автомобиль. У человека может быть автомобиль.Возможно ли это в Hibernate 3.2

У нас есть объект Person, загруженный из базы данных. Я хочу сменить автомобиль. Проблема в том, что у меня нет загруженного объекта Car для использования. Вместо этого у меня есть только идентификатор автомобиля. Используя этот идентификатор автомобиля, можно ли установить автомобиль Person на тот автомобиль, который у нас есть, без загрузки/выбора какого-либо автомобиля из БД? И чем спасти этого Человека, и это автомобиль, чтобы ДБ. Мне не нужна информация. Мне нужно только сказать Hibernate, что я хочу, чтобы автомобиль Person был автомобилем, у которого есть этот Id.

Возможно ли это? Извините Если мой английский sux. Спасибо за консультацию.

ответ

0

Это зависит от того, как отображается ваша ассоциация.

Предполагая, что это отображается с помощью внешнего ключа (от человека к автомобилю). И вы уверены, что экземпляр «нового» автомобиля фактически существует, вы можете использовать метод Session.load() для возврата постоянного прокси-сервера нового автообъекта, а затем установить его на Человек и сохранить человека. Автомобиль не должен фактически быть загружен, пока ассоциация не принесла жадности:

Person person = ...; 
Car newCar = session.load(Car.class, newCarId); 
person.setCar(newCar); 
session.saveOrUpdate(person); 

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

С одной стороны, Person to Car технически является отношением «один ко многим» (Person = owner) или «многие ко многим» (Person = driver), а не «один к одному».

+0

Спасибо за ответ. Я согласен с вами в отношении отношения «один ко многим». Но пример «Человек и автомобиль» легко объяснить. Какова ситуация, если код работает на удаленном клиенте/выходе? Это возможно без .load()? Что угодно, чтобы суррогатировать автомобиль или его прокси с единственным идентификатором, пока нет сеанса или удаленного вызова? Затем мы отправляем наш объект на сервер и saveOrUpdate (person) =). – Ginnun

+0

Удаленный API - это другое дело. Возможны следующие варианты: (1) Удаленный клиент вызывает ваш API для получения нового экземпляра автомобиля и установки его; (2) выставить «changeCarOnPerson (Person, NewCarId)» через ваш API; (3) либо написать класс CarProxy (при условии, что ваш API разрешает), либо разрешить клиенту создавать экземпляр Car с идентификатором только, установить, что на Person, ваша служба загружает фактический экземпляр Car. Я должен сказать, что вариант №1 ** безусловно ** самый чистый. – ChssPly76

+0

Спасибо за ответы. Это то, о чем я думал точно. – Ginnun

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