В Hibernate, когда поля объекта загружены лениво, я могу изменить только одно из полей и выполнить обновление (объект)? - PullRequest
1 голос
/ 27 февраля 2011

Учитывая это:

   @Entity 
   class Order
     {
        @Id
        public int id;

        @OneToOne
        Person person;

        @OneToOne
        Address address;

        //Other Fields
     }

У меня есть заказ, который загружен ленивым. Я изменяю адрес для этого заказа. Обратите внимание, что я не получил доступ к человеку (поэтому он не загружен). Тогда я делаю

update(order);

Я хотел бы знать, что происходит в этом случае с записями базы данных в таблице person. Я не хочу, чтобы запись о соответствующем человеке была обновлена ​​с нулями. И когда я тестировал, он не обновлялся с нулями.

Насколько я понимаю, для ссылки на человека назначен прокси-объект, а не ноль.

Заботится ли Hibernate о том, что если объект не был загружен (в данном случае объект person), нет
связанная запись или записи изменены (в данном случае запись таблицы персоны)?

Безопасно ли делать такое обновление?

Спасибо!

1 Ответ

1 голос
/ 27 февраля 2011

JPA обновляет только те объекты, которые были изменены.Я не знаю ни одного метода update (), вы можете просто использовать commit () или flush () , и все измененные сущности в вашем сеансе будут сохранены в базе данных.

Ленивые загруженные свойства - это просто прокси-объекты, которые вообще не загружаются, вы также можете сделать это вручную, вызвав: [entityManager.getReference] [3]

[3]: http://download.oracle.com/javaee/5/api/javax/persistence/EntityManager.html#getReference(java.lang.Class, java.lang.Object)

...