Nano Hash - криптовалюты, майнинг, программирование

JPA Как получить данные из базы данных после локальной модификации, но до фиксации

Рассмотрим следующий сценарий:

User user1 = userRepository.findOne(userId); //1
user.setName("xyz");
User user2 = userRepository.findOne(userId); //2

В состоянии #1 user1 содержит данные, которые существуют в базе данных. Но в состоянии № 2 объект user2 содержит обновленный пользовательский объект (имя изменено).

Как я могу получить исходные данные из базы данных в состоянии № 2


  • Как насчет обновления? docs.oracle.com /javaee/6/api/javax/постоянство/ 08.02.2018
  • Я пробовал это, но обновление очистит постоянный контекст, а позже, когда будет сохранен обновленный объект, он выдаст ошибку. 08.02.2018
  • Чего именно вы хотите добиться? Вы можете просто скопировать объект, который вы получили на первом шаге 08.02.2018

Ответы:


1

То, что вы пытаетесь сделать, противоречит JPA. Одна из основных идей, лежащих в основе JPA, заключается в том, что каждая сущность представлена ​​ровно одним экземпляром в EntityManager, если вы измените это, «старого» экземпляра больше не будет, потому что он только один. Если вы перезагрузите его, это будет тот же модифицированный экземпляр.

Существуют различные способы обойти это.

  1. Исключите экземпляр из EntityManager, затем перезагрузите. Как вы уже заметили в комментариях, измененный экземпляр больше не управляется и не будет автоматически сохраняться, что, вероятно, не то, что вам нужно.

  2. Выберите информацию в Pojo, а не в сущность. Часто вам потребуется всего несколько конкретных атрибутов. Если вы загрузите их с помощью собственного запроса (@Query( ..., nativeQuery = true), он попадет прямо в базу данных, и если ваша измененная сущность не будет сброшена за это время, она увидит старые данные или, в зависимости от уровней изоляции транзакций, версию, измененную другая транзакция.

  3. Вы можете просто скопировать объект, скопировав каждое свойство в новый экземпляр.

09.02.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..