EntityManager.merge()
可以插入新对象并更新现有对象.
为什么要使用persist()
(只能创建新对象)?
有没有一种方法来初始化EntityManager
没有定义的持久性单元?您能否提供创建实体管理器所需的所有属性?我需要EntityManager
在运行时从用户的指定值创建.不能更新persistence.xml
和重新编译.
关于如何做到这一点的任何想法都受到欢迎!
[Doctrine\ORM\ORMException]
The EntityManager is closed.
Run Code Online (Sandbox Code Playgroud)
在插入数据后出现DBAL异常后,EntityManager关闭,我无法重新连接它.
我试过这样但是没有得到联系.
$this->em->close();
$this->set('doctrine.orm.entity_manager', null);
$this->set('doctrine.orm.default_entity_manager', null);
$this->get('doctrine')->resetEntityManager();
$this->em = $this->get('doctrine')->getEntityManager();
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何重新连接?
一个很长的问题,请耐心等待.
我们将Spring + JPA用于Web应用程序.我的团队在讨论如何在注入EntityManagerFactory
的GenericDAO
(基于泛型的东西对AppFuse中提供的线DAO,我们不使用JpaDaosupport
过的注射某种原因)EntityManager
.我们正在使用"应用程序管理持久性".
反对注入a的论点EntityManagerFactory
是它太重而且不需要,EntityManager
我们需要它.此外,由于Spring会为每个Web请求创建一个DAO的新实例(我怀疑这一点),因此不会出现任何并发问题,因为同一个EntityManager
实例中有两个线程共享.
注入EFM的理由是,它是一个很好的做法,总是很好地拥有工厂的句柄.
我不确定哪种方法最好,有人可以赐教吗?
到目前为止,我的偏好始终是使用EntityManager merge()
来处理插入和更新.但我也注意到merge在update/insert之前执行了额外的select查询,以确保数据库中不存在记录.
现在我正在开发一个需要对数据库进行大量(批量)插入的项目.从性能的角度来看,在我绝对知道我总是在创建一个要保留的对象的新实例的场景中使用persist而不是merge是有意义的吗?
我有一个EJB,我将对象保存到数据库.在我看到的一个例子中,一旦保存了这个数据(EntityManager.persist),就会调用EntityManager.flush(); 为什么我需要这样做?我保存的对象没有附加,以后不在方法中使用.事实上,一旦保存,方法返回,我希望资源被释放.(示例代码也会在删除调用中执行此操作.)
if (somecondition) {
entityManager.persist(unAttachedEntity);
} else {
attachedEntityObject.setId(unAttachedEntity.getId());
}
entityManager.flush();
Run Code Online (Sandbox Code Playgroud) 我有一个使用JPA(transaction-type ="JTA")的java EE项目,hibernate作为提供者.我写我的bean来处理CRUD的事情.该程序在JBOSS 7 AS中运行.
我有一个EntityManagerDAO:
@Stateful
public class EntityManagerDao implements Serializable {
@PersistenceContext(unitName = "dtdJpa")
private EntityManager entityManager;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public Object updateObject(Object object) {
object = entityManager.merge(object);
return object;
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void createObject(Object object) {
entityManager.persist(object);
}
public void refresh(Object object) {
entityManager.refresh(object);
}
public <T> T find(Class<T> clazz, Long id) {
return entityManager.find(clazz, id);
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void deleteObject(Object object) {
entityManager.remove(object);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用时deleteObject
,会出现这个异常.
java.lang.IllegalArgumentException:删除分离的实例com.test.User#5
这是怎么造成的,我该如何解决?
在我很少成功使用的项目中
@PersistenceUnit(unitName = "MiddlewareJPA")
EntityManagerFactory emf;
...
EntityManager entityManager = emf.createEntityManager();
Run Code Online (Sandbox Code Playgroud)
获取EntityManager
数据库连接,但几天前我试图将我的项目移动到Jboss EAP 6.2
它无法创建EntityManager
.我在Google上搜寻它,我发现,我应该尝试改变@PersistenceUnit
,以
@PersistenceContext(unitName = "MiddlewareJPA")
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)
获取EntityManager.它工作但我不知道为什么.有什么区别bettween PersistenceUnit
和PersistenceContext
?每个人的利弊是什么?我们应该在哪里使用其中一个?
什么是区别
<T> T EntityManager.find(Class<T> entityClass, Object primaryKey) and
<T> T EntityManager.getReference(Class<T> entityClass, Object primaryKey)
Run Code Online (Sandbox Code Playgroud)
?
我认为getReference如果被管理则返回实体.并且如果它被管理则查找返回实体,否则在数据库上执行SQL以使其受管.
请确认.
上下文:从webapp我得到要删除的对象的主键(pk类型为long); 应该管理实体以删除.
EntityManager.remove(Object entity)
Run Code Online (Sandbox Code Playgroud)
将托管实体传递给entitymanager删除方法'什么是更好更正确的选项?找到还是得到参考?'
有什么区别:
@Autowired
private EntityManager em;
Run Code Online (Sandbox Code Playgroud)
与:
@PersistenceContext
private EntityManager em;
Run Code Online (Sandbox Code Playgroud)
这两个选项都适用于我的应用程序,但是我可以通过使用 @Autowired
注释来解决问题吗?
entitymanager ×10
jpa ×9
java ×5
merge ×2
persist ×2
spring ×2
doctrine-orm ×1
java-ee ×1
orm ×1
persistence ×1
runtime ×1
sql-delete ×1
symfony ×1