|
|
|
Java Hibernate: как записать в базу промежуточные изменения?
|
|||
|---|---|---|---|
|
#18+
Java Hibernate Сначала вывожу ФИО пользователей (сущность User). Затем меняю имя пользователя Maxim на Bill. Снова вывожу ФИО пользователей. Изменений нет. Имя обновляется после 2-го вывода пользователей. Как обновить сущность User сразу после изменения имени и до 2-го вывода на экран? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 21:37 |
|
||
|
Java Hibernate: как записать в базу промежуточные изменения?
|
|||
|---|---|---|---|
|
#18+
Molasar, - сделать в две транзакции, либо - найти нужный элемент в списке userList и подправить "вручную" (: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 22:18 |
|
||
|
Java Hibernate: как записать в базу промежуточные изменения?
|
|||
|---|---|---|---|
|
#18+
Molasar, где ты этого кода понабрал для изменения ОДНОГО поля с данными? Что будет для 10000 данных в корпоративе? 18407424 Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 22:32 |
|
||
|
Java Hibernate: как записать в базу промежуточные изменения?
|
|||
|---|---|---|---|
|
#18+
Про две транзакции, тоже так думаю, а вот по поводу всего этого метода, вы его как минимум разделите на два, который у вас тянет данные и который данные апдейтит, а то всё вместе намешано попробуй пойми что тут происходит сходу. И еще про особенности хибернейта про кеши его, скорее всего это сюда не относится, если будет 2-е транзакции, и вы используете только createQuery(), но в любом случае будет интересно посмотреть. Хоть я и не использую сейчас хибер, но мне понравилась эта лекция/доклад. Больше стало понимание, отчего у меня 2 года назад глюки происходили с данными в старом проекте :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 23:05 |
|
||
|
Java Hibernate: как записать в базу промежуточные изменения?
|
|||
|---|---|---|---|
|
#18+
Molasar Код: java 1. если вы будете с таким кодом работать, то вы с ОРМ работать не научитесь. Вам DataSet нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 23:58 |
|
||
|
Java Hibernate: как записать в базу промежуточные изменения?
|
|||
|---|---|---|---|
|
#18+
Molasar, Как верно заметили выше, вы перебарщиваете с запросами. В вашем сценарии запросы не нужны в принципе. Для выборки пользователей используйте EntityManager.find А для обновления user.setName() Этого должно быть достаточно если dirty checking не отключен. ORM обнаружит что вы изменили объект и сохранит его во время flush или commit. Ваша проблема заключается в том что ORM оперирует запросами и объектами отдельно. Когда вы вызывали executeUpdate(), запрос не выполнился тут же. Он добавился в очередь. И выполнится он когда-нибудь потом во время синхронизации сессии с БД. ORM работает через 2х уровневое кеширование. Первый уровень это ваш EntityManager, который аккумулирует объекты и то что вы хотите с ними сделать. А второй уровень это кеш между ORM и базой чтобы минимизировать количество обращений к базе. В вашем случае вы загружаете объект User и потом просите EM выполнить некий запрос. ORM не всегда достаточно умный чтобы догадаться какие именно объекты ваш запрос изменит. Для вашего кода есть просто решение - вызвать flush после апдейта. Но ,в целом, это костыль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 10:30 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39598604&tid=2122276]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 163ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...