首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hibernate REQUIRES_NEW或嵌套不能与MariaDB InnoDB一起使用

Hibernate是一个Java持久化框架,用于将Java对象映射到关系型数据库中。Hibernate提供了一种简化数据库操作的方式,使开发人员可以更专注于业务逻辑而不是数据库细节。

Hibernate中的REQUIRES_NEW和嵌套是事务传播属性,用于控制事务的行为。事务是一组数据库操作的逻辑单元,要么全部成功提交,要么全部回滚。REQUIRES_NEW表示每次调用都会创建一个新的事务,而嵌套表示在当前事务内嵌套一个新的事务。

然而,MariaDB的InnoDB存储引擎在处理事务方面与Hibernate的REQUIRES_NEW和嵌套存在一些不兼容性。具体来说,当使用MariaDB InnoDB存储引擎时,REQUIRES_NEW和嵌套事务可能会导致死锁或数据不一致的问题。

为了解决这个问题,可以考虑以下解决方案:

  1. 使用其他的事务传播属性:除了REQUIRES_NEW和嵌套,Hibernate还提供了其他的事务传播属性,如REQUIRED、SUPPORTS、MANDATORY等。根据具体的业务需求,选择合适的事务传播属性来避免与MariaDB InnoDB的兼容性问题。
  2. 使用其他的数据库引擎:如果使用MariaDB InnoDB存储引擎是必须的,可以考虑使用其他的持久化框架或者手动管理事务,而不是依赖Hibernate的事务管理功能。

总结起来,Hibernate的REQUIRES_NEW和嵌套事务在与MariaDB InnoDB存储引擎一起使用时可能会导致兼容性问题。为了避免这些问题,可以选择其他的事务传播属性或者考虑使用其他的数据库引擎。具体的解决方案应根据实际情况进行评估和选择。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库 MariaDB:https://cloud.tencent.com/product/cdb_mariadb
  • 腾讯云云服务器:https://cloud.tencent.com/product/cvm
  • 腾讯云云原生应用引擎:https://cloud.tencent.com/product/tke
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网:https://cloud.tencent.com/product/iot
  • 腾讯云移动开发:https://cloud.tencent.com/product/mad
  • 腾讯云对象存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/um
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

面试官:说说Spring中的事务传播行为

前言 在开发中,相信大家都使用过Spring的事务管理功能。那么,你是否有了解过,Spring的事务传播行为呢? Spring中,有7种类型的事务传播行为。...password` varchar(255) DEFAULT NULL, `username` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB...这种方式与REQUIRES_NEW有所类似,但是NOT_SUPPORTED修饰的方法其本身是没有事务的。这里就不做代码演示了。 NEVER 以非事务的方式运行,如果当前存在事务,则抛出异常。...由于本人使用Spring Data JPA 进行的演示代码,使用嵌套事务会提示: org.springframework.transaction.NestedTransactionNotSupportedException...: JpaDialect does not support savepoints - check your JPA provider's capabilities 搜索了下,hibernate似乎不支持这种事务传播方式

15010

面试官:说说Spring中的事务传播行为

前言 在开发中,相信大家都使用过Spring的事务管理功能。那么,你是否有了解过,Spring的事务传播行为呢? Spring中,有7种类型的事务传播行为。...password` varchar(255) DEFAULT NULL, `username` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB...这种方式与REQUIRES_NEW有所类似,但是NOT_SUPPORTED修饰的方法其本身是没有事务的。这里就不做代码演示了。 NEVER 以非事务的方式运行,如果当前存在事务,则抛出异常。...由于本人使用Spring Data JPA 进行的演示代码,使用嵌套事务会提示: org.springframework.transaction.NestedTransactionNotSupportedException...: JpaDialect does not support savepoints - check your JPA provider's capabilities 复制代码 搜索了下,hibernate

90910
  • 记录一次mybatis缓存和事务传播行为导致ut挂的排查过程

    只有在被调用方法中的数据库操作需要保存到数据库中,而不管覆盖事务的结果如何时,才应该使用 REQUIRES_NEW 事务属性 举个栗子:假设尝试的所有股票交易都必须被记录在一个审计数据库中。...出于验证错误、资金不足其他原因,不管交易是否失败,这条信息都需要被持久化。如果没有对审计方法使用 REQUIRES_NEW 属性,审计记录就会连同尝试执行的交易一起回滚。...使用 REQUIRES_NEW 属性可以确保不管初始事务的结果如何,审计数据都会被保存 mybatis缓存 Mybatis-config.xml中可以配置mybatis的本地缓存范围localCacheScope...mybatis官网解释:MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。...中执行mybatis操作一定会开启新的Session 排查过程 确保mapper方法对应的sql是对的 将使用REQUIRES_NEW的方法改为默认的REQUIRED,发现能查询到platformUser

    56921

    Spring事务的传播机制及底层原理解析

    REQUIRES_NEW (需要新的): 总是创建一个新的事务,如果当前存在事务,则把当前事务挂起,新的事务结束后,再恢复之前被挂起的事务。 5....NOT_SUPPORTED (不支持): 不使用事务,如果当前存在事务,则将其挂起,直到该方法完成后再继续执行。 6....NESTED (嵌套的): 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则如同 `REQUIRED` 一样,新建一个事务。...嵌套事务可以独立于父事务进行提交回滚,而不会影响父事务的状态。...事务传播的具体实现: - 事务传播的实际动作由事务管理器来执行,比如当需要创建新事务时,事务管理器会调用连接(如JDBC ConnectionHibernate Session)的相关API来启动和管理事务

    38810

    MariaDB存储引擎简介

    查看所有的已启用的存储引擎 简单介绍几个 MariaDB 的存储引擎 1、InnoDB/XtraDB XtraDB 属于 InnoDB 分支( Percona 负责维护),针对“效能与监控”进行强化,...5.5 纳入此引擎模块 支持数据压缩(data compression) 支持大型数据处理,速度快于 InnoDB 适合高效能与写密集型(write-intensive) 需求的应用环境 5、MyRocks...目前,由于 FederatedX 只使用 libmysql,它只能与另一个 MySQL RDBMS 通信。...总结: 关于 MariaDB 存储引擎的一般性常规选择(先不考虑拓展和集群),其实大体看来只有以下几个 一般使用InnoDB 快速存取,不使用事务:Aria 高压缩和吞吐,需要降低数据空间占比:MyRocks... TokuDB 归档专用:Archive 连接到其它文本远程数据源:CONNECT 更多 MariaDB 的存储引擎详细,可参看官网 https://mariadb.com/kb/en/storage-engines

    2.7K20

    面试突击87:说一下 Spring 事务传播机制?

    既然是“事务传播”,所以事务的数量应该在两个两个以上,Spring 事务传播机制的诞生是为了规定多个事务在传播过程中的行为的。...事务传播机制使用与演示 接下来我们演示一下事务传播机制的使用,以下面 3 个最典型的事务传播级别为例: 支持当前事务的 REQUIRED; 不支持当前事务的 REQUIRES_NEW嵌套事务 NESTED...NESTED 使用演示 NESTED 是嵌套事务。...UserService 中调用了 LogService 的添加方法,LogService 使用了 NESTED 循环嵌套事务,但在方法执行中出现的异常,因此回滚了当前事务。...事务的传播级别有 7 个,支持当前事务的:REQUIRED、SUPPORTS、MANDATORY;不支持当前事务的:REQUIRES_NEW、NOT_SUPPORTED、NEVER,以及嵌套事务 NESTED

    34310

    为什么建议你要迁移到MySQL 8.0?

    tablespaces for the data 我们有两种方式: 对schema和数据逻辑导出 对schema逻辑导出,使用InnoDB表空间传输数 准备迁移 方式1-全部逻辑导出 It’s recommended...*这些表,因为它们兼容,我建议你保存所有的信息并且手动导入需要的条目例如用户表。这可能是做一些清理的最佳时机。...for example to stay installed without breaking some dependencies 这个新的yum命令非常有用,并且允许其他依赖项(如php-mysqlpostfix...For more info see these posts: 请注意,CentOS中默认使用的PHP版本现在可能与新的默认安全认证插件兼容,因此我们必须使用旧的认证插件创建我们的用户mysql_native_password...Ai8x52Rp 参考链接三:http://t.cn/Ai8xtUli 参考链接四:http://t.cn/Ai8xtjm1 参考链接五:http://t.cn/Ai8xcP9Z 欢迎大家关注Java公众号,一起探讨

    92340

    spring事务为什么生效,回滚失效,事务try catch

    Spring事务的原理 Spring事务的本质其实就是数据库Innodb对事务的支持,没有innodb是事务支持,spring是无法提供事务支持的。...JPA JapTransactionManager Hibernate HibernateTransactionManager JDO HibernateTransactionManager 分布式事务...新建的事务将和被挂起的事务没有任何关系,是两个独立的事务,外层事务失败回滚之后,不能回滚内层事务执行的结果,内层事务失败抛出异常,外层事务捕获,也可以处理回滚操作 PROPAGATION_SUPPORTS...PROPAGATION_NESTED 如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。...try { a(category); //内部类调用,走AOP,事务不起作用,加入a()报错了,插入仍然有效,相当于普通调用 b(category);

    3.2K10

    关于Spring的事务Transactional,锁同步,并发线程Spring事务传播机制和数据库隔离级别

    * @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager */ REQUIRES_NEW...这个事务将被完全 commited rolled back 而不依赖于外部事务, 它拥有自己的隔离范围, 自己的锁, 等等....开始一个 "嵌套的" 事务, 它是已经存在事务的一个真正的子事务. 嵌套事务开始执行时, 它将取得一个 savepoint. 如果这个嵌套事务失败, 我们将回滚到此 savepoint....Transactional(propagation=Propagation.NESTED) public void method2(){ xxxxxx } } ``` 因为method1使用...不管是什么类型的嵌套事务,一个线程只有一个事务,线程结束的时候才提交事务,包括嵌套事务,即使嵌套事务是REQUIRES_NEW,也不是嵌套事务的方法结束就提交事务的,一定是等到外部事务方法结束,整个线程结束才一起提交的

    1.6K30

    Spring的声明式事务管理

    NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。...REQUIRES_NEW 事务属性总是会在启动方法时启动一个新的事务。许多开发人员都错误地使用 REQUIRES_NEW 属性,认为它是确保事务启动的正确方法。...当使用 REQUIRES_NEW 属性的几个方法通过服务间通信编排在同一逻辑工作单元内调用时,该属性就会出现问题。...出于验证错误、资金不足其他原因,不管交易是否失败,这条信息都需要被持久化。如果没有对审计方法使用 REQUIRES_NEW 属性,审计记录就会连同尝试执行的交易一起回滚。...这里要注意的一点是,要始终使用 MANDATORY REQUIRED 属性,而不是 REQUIRES_NEW,除非您有足够的理由来使用它,类似审计示例中的那些理由。

    94950

    如何部署 Galera 数据库集群

    MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,10.0.9版起使用XtraDB来代替MySQL的InnoDB。...将MariaDB软件包库添加到所有服务器 MariaDB 10.1包含在默认的Ubuntu软件包库中,因此我们首先将MariaDB项目维护的外部Ubuntu软件包库添加到我们所有的三个服务器中。...否则,您将从Ubuntu软件包安装10.0版本的MariaDB,该软件包包含Galera软件包。 在所有三台服务器上更新软件包库后,我们就可以安装MariaDB了。...在所有服务器上安装MariaDB 从版本10.1开始,MariaDB Server和MariaDB Galera Server软件包捆绑在一起,因此安装mariadb-server将自动安装Galera...例如,Galera Cluster不能与MyISAM类似的非事务性存储引擎一起使用,mysqld也不能绑定到localhost的IP地址。

    1.5K32

    spring事务传播特性

    事务是一系列的动作(逻辑update,insert,delte…),它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,可以想一下0和1 ,...DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问 时,DataSource实际为SessionFactory,TransactionManager...spring的事务传播属性 事务传播行为类型 说明 REQUIRED 如果有事务在运行,当前的方法就在这个事务内运行;否则,就启动一个新的事务,并在自己的事务内运行; REQUIRES_NEW 当前的方法必须启动新事务...SUPPORTS 如果有事务在运行,当前的方法就在这个事务内运行;否则它可以运行在事务中。 NOT_SUPPORTED 当前的方法不应该运行在事务中,如果有运行的事务,将它挂起。...NESTED 如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行。否则,就启动一个新的事务,并在它自己的事务内运行。

    55620

    2023新版Spring6全新讲解-核心内容之事务管理

    DEFAULT NULL, `age` int DEFAULT NULL, `sex` varchar(3) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB...(1)); } } 二、事务处理 1.相关概念介绍 1.1 什么是事务   数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部执行...NULL COMMENT '账号', `balance` int unsigned DEFAULT NULL COMMENT '余额', PRIMARY KEY (`id`) ) ENGINE=InnoDB...被嵌套的事务可以独立于外层事务进行提交回滚。如果外层事务不存在,行为就像REQUIRED一样。【有事务的话,就在这个事务里再嵌套一个完全独立的事务,嵌套的事务可以独立的提交和回滚。...4.5 配置类的方式   现在使用配置文件的方式已经非常少了。我们基本都是通过配置类的方式来使用的。所以我们还是需要掌握下在全配置类的方式下的事务使用。 定义对应的配置类。

    21920

    深入理解 Spring 事务:入门、使用、原理

    这两个操作,要么一起都完成,要么都不完成。如果其中某个成功,另外一个失败,那么就会出现严重的问题。...Spring 事务的本质,其实就是通过 Spring AOP 切面技术,在合适的地方开启事务,接着在合适的地方提交事务回滚事务,从而实现了业务编程层面的事务操作。...`id` int NOT NULL AUTO_INCREMENT, `name` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB...`id` int NOT NULL AUTO_INCREMENT, `name` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB...REQUIRES_NEW REQUIRES_NEW 也是常用的一个传播类型,该传播类型的特点是:无论当前方法是否存在事务,子方法都新建一个事务。此时父子方法的事务时独立的,它们都不会相互影响。

    3K20

    MariaDB Galera集群入门教程

    MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,10.0.9版起使用XtraDB来代替MySQL的InnoDB。...第一步、将MariaDB软件包库添加到所有服务器 MariaDB 10.1包含在默认的Ubuntu软件包库中,因此我们首先将MariaDB项目维护的外部Ubuntu软件包库添加到我们所有的三个服务器中...否则,您将从Ubuntu软件包安装10.0版本的MariaDB,该软件包包含Galera软件包。 在所有三台服务器上更新软件包库后,我们就可以安装MariaDB了。...第二步、在所有服务器上安装MariaDB 从版本10.1开始,MariaDB Server和MariaDB Galera Server软件包捆绑在一起,因此安装mariadb-server将自动安装Galera...例如,Galera Cluster不能与MyISAM类似的非事务性存储引擎一起使用,mysqld也不能绑定到localhost的IP地址。

    2.2K70

    MySQL层相关优化

    另一个重要的分支版本是MariaDB,说MariaDB是分支版本其实已经不太合适了,因为它的目标是取代ORACLE MySQL。...但也由此产生了以GTID为代表的和官方版本无法兼容的新特性(MySQL 5.7开始,也支持GTID模式在线动态开启关闭了),也考虑到绝大多数人还是会跟着官方版本走,因此没优先推荐MariaDB。...1.2、关于最重要的参数选项调整建议 建议调整下面几个关键参数以获得较好的性能(可使用本站提供的my.cnf生成器生成配置文件模板): 1、选择PerconaMariaDB版本的话,强烈建议启用thread...引擎,强烈建议不要再使用MyISAM引擎了,InnoDB引擎绝对可以满足99%以上的业务场景; 3、调整innodb_buffer_pool_size大小,如果是单实例且绝大多数是InnoDB引擎表的话...此外,字段属性尽量都加上NOT NULL约束,可一定程度提高性能; 3、尽可能不使用TEXT/BLOB类型,确实需要的话,建议拆分到子表中,不要和主表放在一起,避免SELECT * 的时候读性能太差。

    94580

    Spring Boot 2.4.3、2.3.9 版本发布,你准备好了吗?

    relativePath/> Spring Boot 2.4.3版本是v2.4 版本的第三个错误修正版本,本次更新内容包括了 29 个错误修复,15个文档改进和31个依赖项升级,共计75项内容,不可谓丰富...下面小编就带领大家一起看看具体更新内容。...执行动作可能尚未完成而导致访问失败的问题 4、修复 当spring.profiles.include作为YAML列表写入配置文件使用时遇到异常情况不会有报错信息的问题 5、修复缺少新版本 hibernate-micrometer...插件没有将可传递的项目依赖项包含到对应的应用程序层中的问题 10、修复initQueryTimeout和ildeTimeout默认值与Cassandra默认值不一致的问题 11、修复来自devtools的远程应用程序不能与...WebSecurityConfigurerAdapter中的安全筛选器一起使用的问题 12、修复TestRestTemplate在使用 UriTemplateRequestEntity 时会引起UnsupportedOperationException

    2.2K20

    java-Spring-1

    1、@Autowired 自动寻找合适的类型注入,byType 2、@Qualifier("userDAOImpl") 存在多个相同类型时,指定固定的一个bean,和上面1配合使用 3、@Required...检查在配置中是否给该属性赋默认值,如果否,则报错 4、@Autowired(required=false) 对应的bean不是必须的,【但是】,如果不存在,在程序中,调用的时候,会报错,影响对该bean的使用...-- 扫描包下所有资源,配合component使用 --> 可以指定名字(推荐) 7、@Scope("singleton") prototype 8、@PostConstruct @PreDestroy...(不要和propotype一起用,不起作用的) 9、代理 1) 2)@Aspect @Component public...如果不是,可以修改之: alter table tablename type=InnoDb 如果是用hibernate自动建表,而mysql数据库默认的建表类型不是InnoDb,需要修改配置文件:

    58790
    领券