【发布时间】:2014-09-01 20:01:06
【问题描述】:
我在 Glassfish 4 上运行了一些代码,这些代码在 EntityManager(javax.persistence.EntityManager) 上设置属性,这发生在事务期间。
在另一笔交易中,我想读取属性,但我发现它们已经消失了。
我看到在这两种情况下它都是同一个 EntityManager 对象(实际上它是一个 EntityManagerWrapper):
com.sun.enterprise.container.common.impl.EntityManagerWrapper@5a346e8f
属性是否仅在事务的生命周期内有效?
我通过注入得到EntityManager(实际上注入的对象就是上面提到的包装器):
@PersistenceContext(unitName = IEntityManagerService.DEFAULT_PERSISTENCE_UNIT)
protected void setManager(final EntityManager manager) {
assert manager != null;
this.manager = manager;
}
【问题讨论】:
-
你的意思是 em.setProperty ?它们应该在 EntityManager 的整个生命周期内保存; javadocs/spec 中没有任何内容可以说明实现可以在提交任何 txn 后将它们丢弃。也许这个“包装器”是罪魁祸首,而真正的 EntityManager 拥有它们 - 那么为什么不尝试处理真正的 EM 呢?
-
@NeilStockton 是的,em.setProperty。 EM Wrapper 被注入(参见对 OP 的编辑),所以我不确定我是否会通过获取底层 EM 来违反容器规则。
标签: jakarta-ee jpa glassfish jta