Hibernate: проставить внешний ключ
От: dya-victor Россия  
Дата: 21.01.10 13:40
Оценка:
Добрый день!

Пусть у нас есть два класса: Person и Address. У одного Person есть несколько Address. Примерно такая схема:
class Person {
   private Long id;
}

class Address {
  private Long id;
  private Person person;
}

Возьмем ситуацию, когда объект Person у меня не загружен, но есть в БД и я знаю его id. Мне нужно сохранить новый объект Address и проставить ссылку на Person. Делаю так:
Person person = new Person();
person.setId(123);

Address address1 = new Address();
address1.setPerson(person);

addressDao.save(address1);

При этом, перед insert-ом в БД, hibernate делает выборку объекта Person, что в принципе верно. Но. Можно как-нибудь проставить внешний ключ, не выполняя select?
Re: Hibernate: проставить внешний ключ
От: werdnar  
Дата: 25.01.10 09:04
Оценка:
Здравствуйте, dya-victor, Вы писали:

DV>Добрый день!


DV>Пусть у нас есть два класса: Person и Address. У одного Person есть несколько Address. Примерно такая схема:

DV>
DV>class Person {
DV>   private Long id;
DV>}

DV>class Address {
DV>  private Long id;
DV>  private Person person;
DV>}
DV>

DV>Возьмем ситуацию, когда объект Person у меня не загружен, но есть в БД и я знаю его id. Мне нужно сохранить новый объект Address и проставить ссылку на Person. Делаю так:
DV>
DV>Person person = new Person();
DV>person.setId(123);

DV>Address address1 = new Address();
DV>address1.setPerson(person);

DV>addressDao.save(address1);
DV>

DV>При этом, перед insert-ом в БД, hibernate делает выборку объекта Person, что в принципе верно. Но. Можно как-нибудь проставить внешний ключ, не выполняя select?

попробуй поиграться с каскадностью
Re[2]: Hibernate: проставить внешний ключ
От: Jakop Россия https://wmspanel.com
Дата: 27.01.10 00:20
Оценка:
Здравствуйте, werdnar, Вы писали:

W>попробуй поиграться с каскадностью


я думаю у него cascade.none стоит и так. По-моему, чтобы все делалась без загрузки Person ты должен вместо Person в объекте Address
хранить id и сам суппортить связь, тем самым отключив ORM для этой связи. Ну или кеш использовать в этом случае, чтобы Person не вычитывался.
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
Re: Hibernate: проставить внешний ключ
От: bl-blx Россия http://yegodm.blogspot.com
Дата: 27.01.10 04:06
Оценка:
Здравствуйте, dya-victor, Вы писали:

DV>Возьмем ситуацию, когда объект Person у меня не загружен, но есть в БД и я знаю его id. Мне нужно сохранить новый объект Address и проставить ссылку на Person. Делаю так:

DV>
DV>Person person = new Person();
DV>person.setId(123);

DV>Address address1 = new Address();
DV>address1.setPerson(person);

DV>addressDao.save(address1);
DV>

DV>При этом, перед insert-ом в БД, hibernate делает выборку объекта Person, что в принципе верно. Но. Можно как-нибудь проставить внешний ключ, не выполняя select?
При условии, что для Person lazy=true можно сделать так:
Person person = (Person) session.load(Person.class, Long.valueOf(123));
Address address1 = new Address();
address1.setPerson(person);
addressDao.save(address1);
El pueblo unido jamás será vencido.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.