当前位置: 首页 > 知识库问答 >
问题:

spring boot应用:返回旧数据的jpa查询

蓝苗宣
2023-03-14

我们使用1.3.5版本创建了一个spring boot项目。我们的应用程序与Mysql数据库交互。我们创建了一组JPA存储库,在其中我们使用了findAll、findOne和其他自定义查询方法

我们正面临一个随机出现的问题。以下是复制它的步骤:

>

  • 使用spring启动应用程序在数据库上启动读取查询。

    现在,使用mysql-console手动更改上面读取查询返回的记录的Mysql中的数据。

    再次使用Application激发相同的读取查询。

    在步骤3之后,我们本应该收到步骤2修改后的结果,但我们得到的却是修改前的数据。

    现在,如果我们再次使用application激发read查询,它将给出正确的值。

    此问题随机发生。我们没有在应用程序中使用任何类型的缓存。

    在调试过程中,我发现jpa-repository代码实际上在调用mysql,并且它也获取最新的结果,但是当这个调用返回到我们的应用程序服务时,令人惊讶的是返回值中有旧的数据。

    请帮助我们找出可能的原因。

    JPA/数据源配置:

    • spring.datasource.driverclassname=com.mysql.jdbc.driver
    • spring.datasource.url=jdbc:mysql:/localhost:3306/dbname?autoreconnect=true
    • spring.datasource.username=root
    • spring.datasource.password=xxx
    • spring.jpa.database-platform=org.hibernate.dialibet.mysql5dialke
    • spring.datasource.max-wait=15000
    • spring.datasource.max-active=100
    • spring.datasource.max-idle=20
    • spring.datasource.test-on-borrow=true
    • spring.datasource.remove-abandoned=true
    • spring.datasource.remove-abandoned-timeout=300
    • spring.datasource.default-auto-commit=false
    • spring.datasource.validation-query=select 1
    • spring.datasource.validation-interval=30000
    • hibernate.dialt=org.hibernate.dialt.mysql5方言
    • hibernate.show_sql=false
    • hibernate.hbm2ddl.auto=update

    服务方式:

         @Override
        @Transactional
        public List<Event> getAllEvent() {
            return  eventRepository.findAll();
        }
    

    Jparepository:

    public interface EventRepository extends JpaRepository<Event, Long> {
        List<Event> findAll();
    }
    
  • 共有1个答案

    锺博耘
    2023-03-14
    @Cacheable(false)
    

    示例:

    @Entity
    @Table(name="table_name")
    @Cacheable(false)
    public class EntityName {
        // ...
    }
    
     类似资料:
    • 我有一个带有嵌入Id的类。当我尝试使用Jpa存储库进行搜索时,它只返回一个空对象。问题似乎出在嵌入式Id中,因为我用一个没有这个Id的类进行了测试,结果很好。 当我针对数据库进行测试时,JPA在控制台中输出的查询工作正常。 并且没有输出错误。 编辑:数据库中有数据 EDIT2:添加了equals和hashcode。 编辑3:findAll方法有效。 实体 嵌入ID 存储库 服务 正如你所看到的,我

    • 问题内容: 快速版本 基本上,我正在更新hibernate表,后续查询正在加载陈旧的值。 详细版本 hibernate(3.3.1.GA)和EhCache(2.4.2)。 包含页面的持久对象,我将页面添加到本书的中间。我正在使用Databinder / Wicket,尽管我认为这并不相关。 适用的字段/方法是: 最终结果是,有一个新页面添加到列表中,并且数据库也进行了相应更新,我已经在我的数据存储

    • 我需要一个概念来设计一个使用Spring boot、Hibernate和JPA的多数据库应用程序。 目前我正在考虑支持4个关系数据库(Mysql,H2,SQLLite,Oracle)。 我所做的是使用spring boot profile特性选择正确的数据库profile,然后加载相关的数据库属性。

    • 我正在尝试从mysql数据库中检索今天的记录。 和控制器代码: 我希望通过使用findByDate(...)获得今天的记录方法,但似乎不起作用。在查看MysqlWorkbench的数据时,我还注意到一个小问题:日期似乎提前了2小时(例如:现在是11:57,但在mysql workbench软件中显示的是9:57,当我查询服务器时间时,显示的是不正确的tme……)我其实不关心小时/分钟/秒,我只想检

    • 问题内容: 我有以下代码: 返回的错误是:ImportError:没有名为JSONEncoder的模块 问题答案: 使用Flask的内置函数,因为它已经扩展为可以使用日期: 数据将通过一个data包含行数组的单键()作为对象返回(根据行返回的形式将其表示为数组或对象)。 如果需要序列化更多类型(例如,要返回而不是实例),则需要用J知道如何处理类型的子类覆盖Flask的属性: 然后可以在Flask实

    • 大家好,我在一个使用SpringDataJPA的SpringMVC项目中工作,我在一个从JpaRepository扩展而来的接口中有一个nativeQuey,在该查询中,我从不同的表中选择一些值,并返回一个 我打印了该ArrayList的值,其内容如下: 由于查询返回3行,每行有7个值,我怀疑这些对象是3(列表),每个列表有7个字段,我非常确定它们是字符串和int,我在类中有两个导入,我想在其中强