Hibernate注解开发时自动建表缺少外键系列问题(快速解决版)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36798272/article/details/88544944

1.开发环境:

IDE: IntelliJ IDEA 2018.3
Server: Tomcat 8.5.31
Java EE version:java EE 7
Web Application version: 3.1
Database: MySQL 8.0
JDK: 1.8
Spring:4.2.4
Struts:2.3.24
Hibernate:5.0.7

2.问题的解决:

异常信息:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Unable to execute schema management to JDBC target [alter table cst_linkman add column lkm_qq varchar(255)]
org.hibernate.tool.schema.spi.SchemaManagementException: Unable to execute schema management to JDBC target [alter table cst_linkman add column lkm_qq varchar(255)]
java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.

原因:

方言设置问题,博主使用的是MySQL8.0,所以需要设置方言为MySQL8Dialect,然而hibernate的5.0.7版本没有这种方言,所以需要升级hibernate,博主选择升级至5.4.0版本.下载并替换掉之前使用的低版本jar包,把方言改成MySQL8Dialect如下图,最后运行程序.
在这里插入图片描述
在这里插入图片描述
终于,成功了!表成功创建,并且是有外键约束的.
在这里插入图片描述

3.扩展问题:

虽然我最初的目的达成了,但是毕竟我换了hibernate的版本,我怕的是版本兼容的问题,于是开始调试之前已经做好的功能.果然不出我所料,

1).首先我在调试涉及查询语句的功能时出现了异常:

java.lang.IllegalArgumentException: org.hibernate.QueryException: Legacy-style query parameters (`?`) are no longer supported; use JPA-style ordinal parameters (e.g., `?1`) instead : from cn.itcast.domain.BaseDict where dict_type_code=? [from cn.itcast.domain.BaseDict where dict_type_code=?]

解决方法:将原来有?号的代码:

hibernateTemplate.find("from BaseDict where dict_type_code=?", code);

改为在?号后面紧跟一个数字0:

hibernateTemplate.find("from BaseDict where dict_type_code=?0", code);

重启服务器后,涉及查询这部分功能正常,这使我们能够测试增删改相关功能,不出所料,

2).增删改相关的功能也出现异常,诸如:

ognl.MethodFailedException: Method "delete" failed for object cn.itcast.action.CustomerAction@219d879 [java.lang.NoSuchMethodError: org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode;]
java.lang.NoSuchMethodError: org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode;

解决办法:升级Spring版本,在这里我选择升级到5.0.2,下载好并导入使用到的jar包,替换掉之前低版本的jar包.

在这里插入图片描述
经测试后增删改查功能全部正常,如果之后发现其他异常,再更…

猜你喜欢

转载自blog.csdn.net/qq_36798272/article/details/88544944
今日推荐