Добрый день!
Пусть у нас есть два класса: 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?
Здравствуйте, 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?
попробуй поиграться с каскадностью
Здравствуйте, 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);