Обновление сущности JPA-Hibernate без выбора ее из базы данных - PullRequest
5 голосов
/ 25 февраля 2010

У меня есть спящий объект под названием Выполнение. Он создается в начале моего процесса и обновляется в конце, указывая, как он завершился.

Я хотел бы обновить одно свойство этого объекта, не вызывая выбор в моей базе данных.

Execution execution = entityManager.getReference(Execution.class, executionId); execution.setStatus(Status.FINISHED); // -> Вызов этого метода вызывает SELECT в моей базе данных. Я не хотел, чтобы это произошло, я просто хочу обновить свою сущность.

Это не относится к этому методу, любой другой метод, вызываемый результатом, приводит к предложению SELECT. Фактически, выбор, кажется, происходит даже до того, как мой метод был вызван. У меня сложилось впечатление, что прокси hibernate поместили некоторый код в мой конструктор без аргументов класса, чтобы запускать select каждый раз, когда вызывается любой метод.

Возможно ли обновить сущности JPA / Hibernate без применения оператора SELECT в моей базе данных?

1 Ответ

1 голос
/ 25 февраля 2010

Так работает Hibernate. Его прокси-объект загружает реальный объект из БД при каждом обращении к любому свойству без идентификатора.

Попробуйте сохранить / загрузить объект в начале вашего процесса (чтобы выполнить это SELECT), и убедитесь, что сеанс не очищается автоматически при касании объекта (я думаю, что поведение по умолчанию не флеш, но стоит проверить).

Или вы также можете попробовать отсоединить ваш объект от сеанса Hibernate во время обработки.

...