Информация о переходном процессе JPA, потерянная на, создает

У меня есть объект с переходным полем. Когда я хочу создать новый экземпляр объекта, я теряю свою переходную информацию. Следующий пример демонстрирует проблему. Ради примера скажем, что barness является переходным полем.

FooEntity fooEntity = new FooEntity();
fooEntity.setFoobosity(5);
fooEntity.setBarness(2);
fooEntity = fooEntityManager.merge(fooEntity);
System.out.println(fooEntity.getFoobosity()); //5
System.out.println(fooEntity.getBarness()); //0 (or whatever default barness is)

Там какой-либо путь состоит в том, чтобы поддержать мою переходную информацию?

14
задан Pace 5 April 2010 в 22:54
поделиться

1 ответ

Это более или менее работает так, как задумано. Семантика переходного процесса заключается в том, что данные не сохраняются . Сущность, возвращенная из entityManager.merge (obj) , на самом деле является полностью новой сущностью, которая поддерживает состояние объекта, переданного в слияние (состояние, в данном контексте, являющееся всем, что не является частью постоянный объект). Это подробно описано в спецификации JPA . Примечание. Могут существовать реализации JPA, которые поддерживают временное поле после слияния объекта (просто потому, что они возвращают тот же объект), но это поведение не гарантируется спецификацией.

По сути, вы можете сделать две вещи:

  1. Принять решение о сохранении переходного поля. На самом деле это не кажется временным, если вам это нужно после слияния класса с контекстом постоянства.

  2. Сохранять значение временного поля вне постоянного объекта. Если это то, что соответствует вашим потребностям, вы можете переосмыслить структуру своего класса домена; если это поле не является частью состояния объекта домена, его там не должно быть.

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

22
ответ дан 1 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: