【发布时间】:2017-01-19 14:03:02
【问题描述】:
我有一个在 Wildfly 10 上运行的 Java/Spring Web 应用程序。我配置了 JPA,想知道执行更新和删除语句的常用方法是什么。例如,一个 httprequest 进入服务器以显示有关 Person 记录的所有详细信息。我将使用实体管理器查找此记录
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;
}
}
然后这个人的详细信息显示在屏幕上,请求完成,线程消失。在我的代码中不再可以访问实体管理器中附加的人员记录。
一段时间后,用户发起了一个新请求以更新此人的年龄。目前在我的 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 会跟踪托管实体上的更改,并自动将这些更改与数据库同步。
标签: java jpa entitymanager hibernate-entitymanager