JPA:EntityManager删除/更新

JPA:EntityManager删除/更新,jpa,entitymanager,Jpa,Entitymanager,调用EntityManager的update或remove方法时,首先需要通过调用find()来管理实体。但这意味着要重复访问数据库。是我做得不对还是这是唯一的方法?我不确定我是否理解正确。但是如果你的意思是你必须做一些 Employee-Employee=em.find(Employee.class,1); em.getTransaction().begin(); em.remove(雇员); em.getTransaction().commit() 然后是的,您必须这样做:)要使用“Enti

调用EntityManager的update或remove方法时,首先需要通过调用find()来管理实体。但这意味着要重复访问数据库。是我做得不对还是这是唯一的方法?

我不确定我是否理解正确。但是如果你的意思是你必须做一些
Employee-Employee=em.find(Employee.class,1);
em.getTransaction().begin();
em.remove(雇员);
em.getTransaction().commit()


然后是的,您必须这样做:)

要使用“EntityManager”的
合并
删除
方法,您需要在参数中传递entity对象

您还可以使用
本机查询
em.createNativeQuery
),它允许您执行任何需要的请求

毕竟,JPA有一个缓存层来防止不必要的请求一直传到DB。当您调用
find(id)
时,JPA将首先尝试从缓存中检索它,如果它在之后未被修改


因此,不要担心

EntityManager
没有类似于
update()
的方法。请明确术语的用法。尽可能在删除实体之前使用
EntityManager#getReference()
。合并操作是另一种操作,将分离的或非托管的实体传递给
EntityManager
,使其成为托管实体。很抱歉,使用了错误的单词…其合并…但如果在持久上下文中找不到,它将从DB中获取。因此,如果我要删除实体,然后调用find将进行数据库访问以获取它,然后调用delete()将进行另一个调用。如果我不调用find(),则delete不会执行任何操作。行仍然在表中。我正在使用OpenJPA。是的!可能在您的情况下,您需要使用
native query
尝试使用
entityManager.flush()强制将persistentContext与数据库同步