LINUX.ORG.RU

как в jpa фреймворках update'таются только измененные поля?

 ,


0

0

Допустим я пишу так:

@Entity
class A 
{
   @Id int i;
   int x;
   int y;
}
...
A a = new A(); em.persist(a);
a.x = 11;

Как jpa фреймворк узнает, что в БД обновить надо только, например, поле «x», но не «y»? Я так понимаю, что SQL-запрос формируется только на измененные поля объекта, а не на все(это было слишком затратно)?


к примеру можно хранить последнее сохраненное значение для поля, если оно совпадает с текущим - обновлять не надо

wota ★★
()
Ответ на: комментарий от jcdr

это будет не долго, т.к. сущность как правило ты уже достал из хоронилищща, т.е. значения прочитались ранее

Deleted
()
Ответ на: комментарий от Deleted

интересно! т.е. прежде чем отправить изменения в базу, надо получить предыдущую версию всех полей, сравнить все значения и отправить их назад. неужели, так неоптимально происходит работа? или я что-то неправильно понимаю

jcdr
() автор топика
Ответ на: комментарий от jcdr

предыдущая версия полей хранится в памяти, это раз, два это никто не обещал что такая кривая штука как orm будет работать быстро

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

но это же все только ваше мнение? если бы была ссылка на код, реализующий такую проверку или на документацию от openjpa/eclipselink

jcdr
() автор топика

Незнаю насколько это относится к сабжу, но Ebean обновляет все поля. Видел длинющий UPDATE в полотне исключения.

spoilt ★★★
()

hibernate?
прочитай радостного индуса
http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/

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

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

прочитай радостного индуса

Он больше похож на радостного китайца.

orm-i-auga ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.