JPA:EntityManager删除/更新
调用EntityManager的update或remove方法时,首先需要通过调用find()来管理实体。但这意味着要重复访问数据库。是我做得不对还是这是唯一的方法?我不确定我是否理解正确。但是如果你的意思是你必须做一些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
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与数据库同步