栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring Data JPA存储库在EJB计时器中使用会导致TransactionRequiredException

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Data JPA存储库在EJB计时器中使用会导致TransactionRequiredException

简短答案

存储库初始化会中断事务。通过添加

@Eager
到存储库实例中,在不同的线程/事务中预先初始化存储库。

说明

Spring Data存储库实例

@ApplicationScoped
根据需要进行初始化。执行对存储库的首次访问的线程(和事务)用于初始化。

Spring Data JPA存储库初始化有两件事,其中之一是试图弄清楚是否为存储库查询方法提供了命名查询。不幸的是,JPA没有提供API来检查是否存在命名查询,因此我们依赖

EntityManager.createNamedQuery(…)
。如果没有命名查询,则
EntityManager
引发异常
并中止事务

在稍后的阶段,您的EJB方法

EntityManager
在同一线程(和事务)中使用。它检查活动交易。因为该事务被标记为仅回滚,所以您会看到异常。

解决方法

添加

@Eager
到您的存储库声明。Spring Data CDI扩展将在启动时初始化存储库:

@Eagerpublic interface TestRepository extends CrudRepository<TestEntity, Long> {    // …}

暗示

您不需要

@Repository
TestRepository
。Spring
Data通过选择来自Bean的后代
org.springframework.data.repository.Repository
或带有注释的纯接口来选择存储库
@RepositoryDefinition

persistence.xml
不需要您中的事务管理器属性,WildFly已经使用所需设置配置了持久性上下文。

参考文献:

  • DATAJPA-724
  • DATAJPA-617
  • 将Spring Data JPA与EJB / CDI结合使用时,对存储库的初始请求产生奇怪的异常


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393138.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号