【问题标题】:Spring JpaRepository dows not execute delete or insert statements after selectSpring Jpa Repository 在选择后不执行删除或插入语句
【发布时间】:2021-03-13 13:18:32
【问题描述】:

我有一个很奇怪的问题。我有一个带有 JpaRepository 和 hibernate 的 Spring Boot 应用程序来处理持久的简单 Java 对象。这些只有一些字符串属性。没有关系,没有特殊的子类,非常非常简单。我正在使用 Spring Boot 2.3.7.Release。我使用 H2-Database 和 PostegreSQL 测试了这种效果。以前做过数百次。

在我在 Windows 10 上运行的开发笔记本上,一切正常 - 我可以保存实体,删除它们。但是当我尝试在我的 linux 服务器 (centOS) 上部署应用程序时,删除和插入语句根本不会执行。

例如,如果我调用 save 函数,我希望首先是一个 select 语句(检查条目是否已经存在),然后是 insert(因为它不是在我的情况下)。这正是我在笔记本上看到的。在服务器上,我看到执行了初始选择语句,但没有执行以下插入。它甚至没有尝试过。

deleteAll() 也是如此 - 我看到了 select 语句,但缺少以下 delete 语句。而且我没有收到任何错误消息。没有什么。 Hibernate 只是省略了删除和插入语句。

我可以使用我的应用程序中使用的同一用户手动将数据插入数据库,并且程序甚至会提取保存的数据 - 我可以检索它们并显示它们。所以与数据库的连接有效,映射有效,就好像 hibernate 处于某种只读模式,省略了所有删除和插入语句。

对此有任何想法吗?我已经检查了所有可用的配置(除了一些只提供密码的环境变量之外,它们都是相同的)。

我只是想不出去哪里找。提前非常感谢!

【问题讨论】:

  • 调试时间...
  • 我做了一个完整的调试 - 它看起来完全相似,只是 linus 服务器上缺少插入和删除语句

标签: java hibernate spring-data-jpa


【解决方案1】:

我终于找到了解决方案 - 另一个数据源由应用程序的一部分(弹簧批处理)自动配置,这是两者之间的竞争,其中一个首先被初始化。在我的笔记本电脑上,postgres jpa 赢得了一个工作系统,在服务器上,另一个工作,导致了问题。

我在调试日志中发现的唯一区别是 JPA 初始化的时间更长...

手动将Spring批处理连接到postgresql后,就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2019-05-19
    • 1970-01-01
    • 2018-11-25
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多