У меня есть веб-приложение Java/Spring, которое работает на Wildfly 10. Я настроил JPA и задавался вопросом, какой общий подход заключается в том, чтобы делать операции обновления и удаления. Скажем, например, httprequest входит в сервер, чтобы показать все подробности о записи Person
. Я буду использовать менеджер сущности, чтобы найти эту запись,Обновление объекта с помощью JPA/entityManager
class PersonDao
{
@PersistenceContent
entityManager entityManager
public Person findPerson(int id)
{
assert(id >= 0); //pseudocode
Person p = this.entityManager.find(Person.class,id);
assert(p != null); //pseudocode
return p;
}
}
Тогда детали этого человека показаны на экране, запрос заканчивается и поток ушел. Записанная запись Person в менеджере сущности больше не доступна в моем коде.
Спустя некоторое время пользователь обновляет новый запрос для обновления возраста человека. В настоящее время в моем классе Dao я снова переписываю запись, поэтому я уверен, что она присутствует в моем контексте персистентности, но она кажется излишней и утомительной. Я хотел бы знать, лучший способ осуществить это:
public void updatePersonAge(int id, int newAge)
{
assert(newAge >= 0)
Person p = this.findPerson(id);
p.setAge(newAge);
this.entityManager.persist(p);
}
persist не работает для обновлений. Вызов для использования - merge(), и, возможно, даже это избыточно, JPA отслеживает изменения на управляемых объектах и автоматически синхронизирует эти изменения с базой данных. – Gimby