问题描述:

在项目开发的过程中,使用Hibernate的ORM进行建表时,出现 “ Could not retrieve transation read-only status server ”的异常,无法进行表的创建的操作,具体异常内容如下:

org.activiti.engine.ActivitiException: couldn't create db schema: create table ACT_GE_PROPERTY (

NAME_ varchar(64), 
VALUE_ varchar(300), 
REV_ integer, 
primary key (NAME_) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin
at org.activiti.engine.impl.db.DbSqlSession.executeSchemaResource(DbSqlSession.java:1242)
at org.activiti.engine.impl.db.DbSqlSession.executeSchemaResource(DbSqlSession.java:1138)
at org.activiti.engine.impl.db.DbSqlSession.executeMandatorySchemaResource(DbSqlSession.java:897)
at org.activiti.engine.impl.db.DbSqlSession.dbSchemaCreateEngine(DbSqlSession.java:874)
at org.activiti.engine.impl.db.DbSqlSession.dbSchemaUpdate(DbSqlSession.java:952)
at org.activiti.engine.impl.db.DbSqlSession.performSchemaOperationsProcessEngineBuild(DbSqlSession.java:1318)
at org.activiti.engine.impl.SchemaOperationsProcessEngineBuild.execute(SchemaOperationsProcessEngineBuild.java:28)
at org.activiti.engine.impl.interceptor.CommandInvoker$1.run(CommandInvoker.java:37)
at org.activiti.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:78)
at org.activiti.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:57)
at org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:42)
at org.activiti.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:48)
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:63)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:35)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:44)
at org.activiti.engine.impl.ProcessEngineImpl.<init>(ProcessEngineImpl.java:81)
at org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:665)
at etc.TActiviti.createActivitiTables(TActiviti.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.sql.SQLException: Could not retrieve transation read-only status server
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:959)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:949)
at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3967)
at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3938)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:814)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:791)
at org.activiti.engine.impl.db.DbSqlSession.executeSchemaResource(DbSqlSession.java:1216)
... 40 more
Caused by: java.sql.SQLException: Unknown system variable 'tx_read_only'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4208)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4140)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2597)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2758)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2820)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2769)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1569)
at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3961)

... 44 more

问题分析:

导致这个异常的情况有两种:

一种情况为:使用MySql数据库服务为最新版本8.0.11,而在项目开发的过程中使用了低版本的MySql驱动包。

二种情况为: 当MySQL的数据库隔离级别为REPEATABLE-READ时,查询一个select语句也算是事物的开始,而且在hibernate里会把以select语句开头的事务标记为只读事务,此时在这个事务里再执行insert、update、delete等DML语句就会出现如上的异常信息。

解决方案:

解决方案一:

修改项目中MySQL数据库驱动包,将版本选择为与当前数据库服务器版本相同的版本,如果是Maven项目,则在pom.xml的配置文件中,键入如下内容:

 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java.version}</version></dependency>

注意:${mysql-connector-java.version} 为自己匹配的版本号!!!

如果为普通Web项目,我这儿提供了几个常用版本的MySQL驱动下载,点击下面连接进行下载:

https://download.csdn.net/download/hello_world_qwp/10473266

解决方案二:

通过修改MySQL的事务隔离级别实现,查看当前MySQL数据库的事务隔离级别,输入命令 “ show variables like 'transaction_%'; ” ,如下图:

将隔离级别修改为 -> READ-COMMITTED 即可,输入命令 “ SET GLOBAL transaction_isolation='READ-COMMITTED'; ” 即可解决该问题了。

注:如果要永久的生效,则需要在MySQL的初始化配置文件中进行配置,如下图:

好了,关于 Could not retrieve transation read-only status server 的解决办法 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。

Could not retrieve transation read-only status server 的解决办法相关推荐

  1. 服务器上 type=Internal Server Error, status=500 错误解决办法

    服务器上 type=Internal Server Error, status=500 错误解决办法 原本在环境上好好的,但是隔了一个下午却出现了500的错误,排查了很久,一开始还以为是我自己的配置文 ...

  2. mysql master status_show master status为空解决办法

    show master status为空解决办法 kerwin 五月 29, 2014 默认yum安装了mysql,现在想调试一下主从,结果发现执行show master status为空. Welc ...

  3. your port 80 is actually used by server IIS解决办法

    为什么80%的码农都做不了架构师?>>>    your port 80 is actually used by server IIS解决办法 Wamp  Apache 检测 80端 ...

  4. 关于mac双系统安装SQL Server卡在starting server的解决办法

    关于mac双系统安装SQL Server卡在starting server的解决办法 因为本人有时候会做一些设计的公司,奔着mac系统的稳定性,购置了一台macbook Pro2017年出厂的一款本, ...

  5. is this mysql server_远程连接MySQL数据库报错:is not allowed to connect to this MYSQL server的解决办法...

    1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入MySQL后,更改 "mysql" 数据库里的 " ...

  6. mysql数据库提示本地无法连接远程服务器(Host is not allowed to connect to this MySQL server)解决办法

    问题描述: 1.远程服务器安装了mysql服务并且启动成功,在本地可以进行自由的访问和更新等操作 2.服务器已开通了远程访问服务器3306端口的权限并且通过netstat -ltnp命令查看3306处 ...

  7. [error] id returned 1 exit status原因及解决办法

    1.  上次编译运行的shell没有关闭(小黑窗) 2.函数定义在了main()函数里面 例: int main() {...void Function_1(int a,char b,char c){ ...

  8. Failed to load resource: the server responded with a status of 404 ()解决办法

    这是由于服务器编译的问题导致的.在服务器编译打包时,有些资源没有编译进去,导致服务器里不能访问一些资源. 解决方法: 1.将无法扫描到的资源放入out文件夹对应的位置中 例如: 将(1)处的文件夹放到 ...

  9. 6678EVM调试K1_STK_v1.1例程中GE_test的时候报错:DDR3 leveling has failed, STATUS = 0x40000064的解决办法

    在调试K1_STK_v1.1例程中GE_test的时候,使用的是TMDSEVM6678LE板子. 最开始一直报错DDR3 leveling has failed, STATUS = 0x4000006 ...

最新文章

  1. 【武书连】2021 中国一流大学名单(30 所)和中国大学综合实力 700 强出炉!
  2. 简单module_深入理解JavaScript之全面解析Module模式
  3. mysql解释器_atitit.java解析sql语言解析器解释器的实现
  4. The ntpath module
  5. python股票自动买卖视频教程_十分钟学会用Python交易股票
  6. 博客系统评论模块列表转树形结构
  7. python 大众点评模拟登陆_python项目实战:模拟登陆163邮箱,简单到爆
  8. JMETER安装中遇到的问题(not able to find Java executable or version.Please check your java installation)
  9. mini2440 SD卡脱机烧写恢复
  10. java tm插件下载_Java(TM) Platform SE binary
  11. 忍痛分享五款小众软件,点赞收藏加关注
  12. 主板android刷机,安卓主板刷机步骤
  13. HTC IMEI码或SN码查询地址
  14. xml文件怎么转换成wps_xml文件转word文档 怎么将XML文档转成WORD文档
  15. ionic:引入图标
  16. 三菱PLC以太网MC通讯协议模块
  17. 一个栈的入栈序列是 a,b,c,d,e,则栈的不可能的输出序列是( ) 。
  18. linux可执行文件剪裁
  19. 黎曼流形学习的学习笔记(2):Neural Ordinary Differential Equations(来源:NIPS 2018 oral) (未完待续)
  20. brk系统调用和copy-on-write机制

热门文章

  1. Android快速开发整理(库、插件,kotlin枚举注解
  2. 打工宣言“我选择打工”走红,网友:言之有理,不得不赞同!
  3. 计算机培训简报膜报,第二期计算机培训简报(第十二期)
  4. 分析在线直播答题应用基础架构
  5. 安卓面试中高级安卓开发工程师总结之——如何写一份让HR主动邀请你面试的简历
  6. mysql同步数据_实现MySQL数据库数据的同步方法介绍
  7. 《逆袭大学:传给IT学子的正能量》
  8. jQuery插件,UI
  9. DIV根据里面文字自动撑开
  10. 天王星技术社区在成都举行《联盟链趋势和应用》交流会