问题标签 [entitymanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
31578 浏览

java - EntityManager 在 JBoss JSF bean 中的 merge() 上抛出 TransactionRequiredException

我在 JBoss 5.0.1GA 上设置了一个 JSF 应用程序,以在表格中显示用户列表,并允许通过每个用户旁边的按钮删除单个用户。

当 deleteUser 被调用时,调用被传递给一个 UserDAOBean,它得到一个从 JBoss 注入的 EntityManager。

我正在使用代码

删除用户(代码是来自 JPA 教程的 c&p)。只是调用 em.remove(entity) 没有任何效果,仍然会导致同样的异常。

当到达这一行时,我得到一个 TransactionRequiredException:

(跳过显然不相关的堆栈跟踪的东西)

...

20:38:06,406 错误 [[Faces Servlet]] Servlet.service() for servlet Faces Servlet 抛出异常 javax.persistence.TransactionRequiredException:EntityManager 必须在 org.jboss.jpa.deployment.ManagedEntityManagerFactory.verifyInTx(ManagedEntityManagerFactory .java:155) 在 org.jboss.jpa.tx.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:192) 在 at.fhj.itm.utils.DAOImplTemplate.delete(DAOImplTemplate.java:54) 在 at.fhj.itm。 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 处的 UserBean.delete(UserBean.java:53)

...

我已经尝试在它周围包装一个手动管理的事务(em.getTransaction().begin() + .commit()),但这失败了,因为它在 JBoss 容器中是不允许的。我在 UserTransaction 上也没有成功。在网上搜索这个问题也没有找到类似的案例和解决方案。

有没有人经历过类似的事情并找到解决方案?

0 投票
1 回答
1468 浏览

web-services - 如何在基于非 EJB 的 WebService 中注入 EntityManager?

标题说明了一切:我有一个简单的 WebService

当然WebService也是在web.xml中定义的,调用WSDL就可以了,客户端可以调用webmemethods等等。

如您所见,我希望它能够注入 EntityManager 和 UserTransaction,我需要它来创建进一步的 DAO。但是,两者始终为空。

WebService 不是基于 EJB,有没有办法检索这些对象?

容器是 JBoss 5.0GA

0 投票
1 回答
2870 浏览

hibernate - JBoss下如何保持EntityManager的缓存与Hibernate保持一致?

我们正在使用 Hibernate 运行 JBoss,并且遇到了这个问题。

当会话 bean 使用 EntityManager 查找实体时,它可能已经存在于 EntityManager 的缓存中,并且它的状态可能已经过时。如果代码使用这样的实体来做出决定,它可能会做出错误的决定,从而产生错误。

这是一个示例案例。

HTTP 请求 1. 会话 bean 创建一个实体实例并将其存储,并将字段“A”设置为值 1。持久化实体的 ID = 4。

HTTP 请求 2。会话 bean 查找 ID = 4 的实体,将其字段“A”设置为值 2 并保存它。

HTTP 请求 3。会话 bean 查找 ID = 4 的实体并检查它的字段“A”。如果值为 1 则做一件事,如果值为 2 则做另一件事。

如果请求 3 中的 EM 恰好与请求 1 中的 EM 相同,则会发生不希望的行为。我已经对此进行了测试并得到了大约。10%的失败案例。

所以问题是 - 如何避免这种情况?每次我必须确保实体是最新的时调用 em.refresh() 或 em.clear() 似乎是在浪费资源。

0 投票
2 回答
2480 浏览

hibernate - 如何强制 JBoss 4.2.3 为每个请求清除休眠的会话缓存?

在我看来,JBoss 为多个请求重用了实体管理器和底层休眠会话。我已经运行了一个测试,证明在某些情况下,实体的状态可能已经过时,即使它只是使用em.find().

如何禁用此行为并强制清除或丢弃使用过的会话以确保使用清除缓存处理每个请求?

升级版:

这是一个示例案例。

HTTP 请求 1. 会话 bean 创建一个实体实例并将其存储,其中字段“A”设置为值 1。持久化实体的 ID = 4。

HTTP 请求 2。会话 bean 查找 ID = 4 的实体,将其字段“A”设置为值 2 并保存它。

HTTP 请求 3。会话 bean 查找 ID = 4 的实体并检查它的字段“A”。如果值为 1 则做一件事,如果值为 2 则做另一件事。

如果请求 3 中的 EM 恰好与请求 1 中的 EM 相同,则会发生不希望的行为。我已经对此进行了测试并得到了大约。10%的失败案例。

0 投票
4 回答
60634 浏览

java - 注入 EntityManager 与。实体管理器工厂

一个很长的问题,请多多包涵。

我们将 Spring+JPA 用于 Web 应用程序。我的团队正在讨论是否注入EntityManagerFactoryGenericDAO基于泛型的 DAO,APPFUSE 提供的线路,我们JpaDaosupport出于某种原因不使用)而不是注入EntityManager. 我们正在使用“应用程序管理的持久性”。

反对注入 a 的论点EntityManagerFactory是它太重了,所以不是必需的,它可以满足EntityManager我们的需要。此外,由于 Spring 将为每个 Web 请求创建一个 DAO 的新实例(我对此表示怀疑),因此不会出现任何并发问题,因为在同一个EntityManager实例中由两个线程共享。

注入 EFM 的论点是,它是一个很好的实践,总之,拥有一个工厂的句柄总是好的。

我不确定哪个是最好的方法,有人可以赐教吗?

0 投票
4 回答
19423 浏览

hibernate - JPA EntityManager,它是如何工作的?

很抱歉这个菜鸟问题,但我在使用 JPA+Hibernate 时遇到了问题,所以我认为我的想法并不清楚。我有一些实体,比如 A、B、C、D,我编写了 AMethods、BMethods、CMethods、DMethods。每个 *Methods 类都包含通过 EntityManagerFactory 初始化的 EntityManager 和一些基本上执行查询的方法。我不知道我是否应该使用单例模式(这样我每个 *Method 类都有一个 EntityManager),或者我是否需要在每次执行查询或持久/删除实体时打开和关闭 EntityManager...你能帮助我吗??

0 投票
3 回答
137 浏览

oop - 我应该在哪里创建实体对象?

我有一个实体类和一个实体 DAO 类。

是否应该由 DAO 类负责创建实体类的实例,或者是否应该有一个实体创建者/管理器类仅使用 DAO 类从数据库中获取数据以创建实体类。

谢谢,

克里斯

0 投票
4 回答
19460 浏览

jpa - 为什么在 JPA EntityManager 查询中抛出 NoResultException 但 find 没有?

有人可以告诉我为什么在 JPA 1.0 EntityManager 中通过 find 检索对象时,如果找不到则必须处理 null 的内在原因,但是当通过 createQuery getResultList 使用 Query 接口时,找不到时会抛出 NoResultException 。

也许我遗漏了一些东西,但我觉得它对于一种语言非常不一致,实际上我不得不做很多重新设计,因为使用查询界面从简单的查找器更改为更细粒度的查询。

多谢你们。

0 投票
1 回答
380 浏览

java - EntityManager 刷新

我对一些数据库表进行了逆向工程,并制作了外观接口和实现类。我需要对实体执行 refresh(),但 EntityManager 是逆向工程的私有对象,我不想编辑逆向工程类。如何获取 EntityManger 以便调用 refresh()?

0 投票
2 回答
963 浏览

jboss - Jboss 服务/托管 Bean 问题

我在 JBOSS 内部运行了一个托管 bean/服务。然后我有一个石英作业,它偶尔会醒来并调用托管 bean 的方法。这种方法有时很长而且很冗长,而且由于我不希望石英作业超时,所以我在托管 bean 中实现了一个线程来执行处理。线程完成后,我需要用结果更新数据库表。这是一个非常连续的过程,它需要基于一些业务规则等。

我的主要问题是我可以在服务中毫无问题地使用 EntityManager,但是我不能在线程中使用它,我得到一个 NullPointerException。解决这个问题的最佳方法是什么?

谢谢,

斯科特