InvalidDataAccessApiUsageException:执行更新/删除查询 Spring XML 到 Java 配置

2024-03-16

我正在尝试将 spring xml 配置转换为 java 配置。通过 XML 配置可以完美地实现这一点。但是,如果我使用 java 配置初始值设定项,它会引发以下异常。当它尝试运行 JQL 时会发生这种情况。但应用程序正常启动(所有 JPA 映射均已初始化)。

org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:410) [spring-orm-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:216) [spring-orm-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417) [spring-orm-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.dao.support.ChainedPersistenceExceptionTranslat

以下是我的持久性初始值设定项类。阅读后发现这与交易未正确启动有关。我已将调试点放在每个方法中,但 transactionManager 方法永远不会在服务器启动期间或任何以后的时间执行。我不确定我做错了什么:(。当通过 persistence.xml 初始化持久性时,基于相同的代码可以完美地工作。

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "au.mypkg")
public class DatabaseConfig  {


    @Bean(name = "dataSource")
    @Primary
    public DataSource dataSource() throws Exception {
        Context ctx = new InitialContext();
        return (DataSource) ctx.lookup("java:jboss/datasources/mydb");
    }

    @PersistenceContext(unitName = "persistenceUnit")
    @Primary
    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws Exception {
    ..........

    @Primary
    @Bean(name = "transactionManager")
    public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        final JtaTransactionManager transactionManager = new JtaTransactionManager();
        transactionManager.setTransactionManagerName(JBOSS_TRANSACTION_MANANGER);
        return transactionManager;
    }

在 Dao 上访问该方法时出现错误

   public void updateById(final Long id) {

        final String sqlQuery = "UPDATE testtable w SET w.LAST_ACCESSED = :date WHERE w.testtable_ID = :testid";
        final Query query = dao.createNativeQuery(sqlQuery);
        query.setParameter("date", new Date());
        query.setParameter("testid", id);
        query.executeUpdate();
    }

我遇到了一些问题,我通过在执行删除或更新的服务方法上添加 @Transactional 注释来解决它。 就我而言,这是一种调用存储库方法的方法,该方法通过 jpql 执行删除,如下所示,我认为它也可以解决您的问题:

@Modifying    
@Query("delete from OtherPayment otherPayment " +
       "where otherPayment.otherPaymentParam.id = :otherPaymentParamId")    
void deleteByOtherPaymentParamId(@Param("otherPaymentParamId") Long otherPaymentParamId);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

InvalidDataAccessApiUsageException:执行更新/删除查询 Spring XML 到 Java 配置 的相关文章

随机推荐

  • 我可以通过编程方式创建 Google 帐户吗?

    有谁知道是否通过java中的google api 我可以以编程方式创建谷歌帐户 Yes ish 管理 SDK https developers google com admin sdk Directory API 允许您创建可与 Googl
  • 在nodejs中写入文件之前对数据流进行排序

    我有一个输入文件 可能包含最多 1M 条记录 每条记录如下所示 field 1 field 2 field3 n 我想读取这个输入文件并根据field3在将其写入另一个文件之前 这是我到目前为止所拥有的 var fs require fs
  • 如何将业务逻辑和电子邮件发送功能分开?

    我的 Java Web 应用程序有一个要求 需要在某些条件下发送电子邮件警报 为此 我使用了 javax mail api 并且发送电子邮件效果很好 但问题是程序执行要等到发送电子邮件的方法执行完毕为止 由于在各个点要发送数百封电子邮件 这
  • 将结构(或类)从 C++ dll 传递到 C# (Unity 3D)

    我正在编写一个包装器以从传感器获取一些数据 虽然我在传递 int float 和它们的数组方面没有问题 但我很难掌握如何传递结构 代码总结 C side 结构如下 struct HandInfo int id float x y z 在某一
  • 如何使用适用于浏览器的 aws-sdk V3 跟踪到 S3 的上传进度 (javascript)

    我可以在网上找到很多关于如何使用 aws sdk V2 跟踪上传到 S3 的进度的资源 监听如下事件 on httpUploadProgress event gt 但自从我将 aws sdk 更新到 V3 后 就不再有侦听器了 我相信我现在
  • 将整数转换为二进制并将其存储在指定大小的整数数组中:c++

    我想将整数转换为二进制字符串 然后将整数字符串的每一位存储到给定大小的整数数组的元素中 我确信输入整数的二进制表达式不会超过指定数组的大小 如何在 C 中做到这一点 伪代码 int value assuming a 32 bit int i
  • NSString 的精确浮点值

    NSString str 37 3336 float f str floatValue f 为 37 3335991 除了我自己四舍五入之外 还有没有办法从 NSString 获取精确的浮点值 Use NSDecimalNumber dec
  • 跨子域 iframe 和 JavaScript

    我正在开发一个 CMS 网站 其域名是 http www acmssite com 他们有一个存储表单系统的子域 http www forms acmssite com 我在第一个上有一个 iframe 它查看后者中的表单 我需要运行脚本来
  • currval 尚未定义此会话,如何获取多会话序列?

    我的目标是在表中插入新行时自动插入主键字段 如何在 PostgreSQL 中获取从一个会话到另一个会话的序列 doubleemploi hanbei home yves psql d test Mot de passe psql 8 4 1
  • Jenkins 针对特定分支的 git commit 触发器也会为其他分支构建作业

    我们有一个内部企业 Github 存储库 并且我有多个功能分支 我面临着在特定分支上触发构建的问题 我已经为每个功能分支配置了作业 一个功能分支有一份詹金斯工作 我第一次提交代码时 它还会触发其他分支的作业构建 重现问题的步骤 1 我们有一
  • dBWriteTable 无法将 NULL 写入 SQL Server 表

    ISSUE 无法将 NA 值从 data frame 插入到数据库表 STEPS 将表从 SQL Server 读入 Rdata frame 表是十进制的 有一些NULL data frame 是数字 有一些NA dBWriteTable抛
  • 具有旧 Facebook 应用程序版本的 Facebook SDK 3.0 重定向到浏览器并卡住

    我的应用程序中有一个 FB AuthButton 正在连接到 FB 进程我的设备正在运行旧版本的 FB 应用程序 版本 1 8 3 1 8 4 当我单击登录按钮时 该过程不会启动本机应用程序 而是调用浏览器来完成该过程 在日志中 我看到这些
  • Javascript 可以检查文件的内容更改吗?

    Example I have var r new FileReader r onload function e drawGraph r result r readAsText f 从用户输入的文件 f 绘制图形 有没有办法检查文件 f 是否
  • 使用 Java 布局管理器的目的是什么?

    似乎每当我尝试创建一个程序时 我总是会使用setLayout null 在 Java 中使用命令 因为我喜欢绝对定位我要放入 Swing 组件上的任何内容 从我读到的内容来看 每个人都在说使用布局管理器来简化编码过程 但它是如何简化的呢 平
  • 从Android手机内存中读取文本文件

    我只想在手机内存中创建一个文本文件 并且必须读取其内容才能显示 现在我创建了一个文本文件 但它不存在于路径 data data package name file name txt 中并且它没有在模拟器上显示内容 我的代码是 public
  • 完整日历 - 拖放 - 自定义

    我正在使用 React 调度程序 FullCalendar 我喜欢保留拖放功能来将事件从一种资源更改为另一种资源 但是有没有办法禁止水平拖动来改变时间呢 同样现在 拖放的工作方式就像事件将从一个资源粘到另一个资源一样 并且没有平滑的拖动操作
  • 如何使用 jQuery UI 调整 datatables.js 列的大小

    我在 stackoverflow 中找到了调整表列大小的解决方案 jQuery UI 使用表格和 colspan 调整大小 https stackoverflow com questions 18812432 jquery ui resiz
  • 图实现C++

    我想知道如何用 C 快速编写图的实现 我需要数据结构易于操作和使用图算法 例如 BFS DFS Kruskal Dijkstra 我需要这个实现来参加算法奥林匹克竞赛 因此编写数据结构越容易越好 你能建议这样的DS 主要结构或类以及其中的内
  • 找不到满足 torch>=1.0.0 要求的版本?

    找不到满足要求的版本 torch gt 1 0 0 找不到 torch gt 1 0 0 的匹配发行版 来自 stanfordnlp 如果您的 Python 版本太新 也可能会发生这种情况 目前使用 Pytorch不支持3 7 9以上版本
  • InvalidDataAccessApiUsageException:执行更新/删除查询 Spring XML 到 Java 配置

    我正在尝试将 spring xml 配置转换为 java 配置 通过 XML 配置可以完美地实现这一点 但是 如果我使用 java 配置初始值设定项 它会引发以下异常 当它尝试运行 JQL 时会发生这种情况 但应用程序正常启动 所有 JPA