一步一步升级配置14: Mysql数据库,hibernate.dialect 使用MySQL5_MySQL
Hibernate
一步一步升级配置14:Mysql数据库,hibernate.dialect使用org.hibernate.dialect.MySQL5Dialect替代org.hibernate.dialect.MySQLDialect
一.背景:
最近一个项目,使用的hibernatejpa正向生成数据库表主键及索引index
不过,发现一些表, @Entity类里面明明写了index
/**
* Gets the商品标题,不能超过300字节.
*
*@returnthe商品标题,不能超过300字节
*/
@Column(name ="TITLE", length = 300)
@Index(name ="I_PRODUCT_ITEM_TITLE")
publicStringgetTitle() {
returntitle;
}
但是生成的数据库表, title字段却没有索引
二.故障排查
2.1 checkcolumn type
检查了下这张表的title字段,发现 title字段的类型是longtext
2.2 check create index log
并且执行,hibernate.hbm2ddl.autoupdate的时候,发现log 里面有这么两句
19:56:36.352 [main] DEBUG o.h.tool.hbm2ddl.SchemaUpdate - create index I_PRODUCT_ITEM_TITLE on T_PRODUCT_ITEM (TITLE)
19:56:36.389 [main] ERROR o.h.tool.hbm2ddl.SchemaUpdate -Unsuccessful: create index I_PRODUCT_ITEM_TITLE on T_PRODUCT_ITEM (TITLE)
longtext类型的字段,不可以创建索引
2.3 try fix(尝试1):
我将length改成200,成功创建了varchar(200)的字段
并且成功创建了索引
20:04:57.481 [main] DEBUG o.h.tool.hbm2ddl.SchemaUpdate - alter table T_PRODUCT_ITEM add column TITLE varchar(200)
20:04:57.768 [main] DEBUG o.h.tool.hbm2ddl.SchemaUpdate - create index I_PRODUCT_ITEM_TITLE on T_PRODUCT_ITEM (TITLE)
2.4 try fix(尝试2):
我将length改成260,又是longtext类型
2.5 try fix(尝试3):
多次尝试,发现临界点在length255
三.思考:
3.1如果要交差,那么让大家把所有>255的字段的长度都改成255
但是这不是我的性格,我的性格是"事出反常必有妖"
3.2问题是,为毛length>255的字段生成的表字段却是longtext类型的?
原以为是我的hibernate/hibernate-annotations版本(3.5.1-Final)太低了,
我尝试了升级到3.6.10-Final/3.5.6-Final,结果还是longtext类型
后来一想,肯定是hibernatemapping mysql数据库,生成表的地方有问题,就想看看String和数据库字段匹配的地方
我们原来使用的是 org.hibernate.dialect.MySQLDialect
四.源码:
4.1 org.hibernate.dialect.MySQLDialect
源码中:
原来在这里,如果长度
否则创建longtext类型
这里有个文章: http://dev.mysql.com/doc/refman/5.0/en/char.html
在mysql5.0.3之前,varchar最大长度是255,在5.0.3之后的版本是65535长度
4.2 org.hibernate.dialect.MySQL5Dialect
源码中,还有个MySQL5Dialect
如果长度
否则创建longtext类型
尝试着将sessionFactoryhibernateProperties中的hibernate.dialect换成org.hibernate.dialect.MySQL5Dialect
(扩展阅读: 开箱即用(配置过程),使用spring减少配置hibernate mapping的痛苦(AnnotationSessionFactoryBean))
重新执行hibernate.hbm2ddl.autoupdate
20:24:31.375 [main] DEBUG o.h.tool.hbm2ddl.SchemaUpdate - alter table T_PRODUCT_ITEM add column TITLE varchar(300)
20:24:31.661 [main] DEBUG o.h.tool.hbm2ddl.SchemaUpdate - create index I_PRODUCT_ITEM_TITLE on T_PRODUCT_ITEM (TITLE)
成功创建varchar(300)字段,并且成功创建索引
参考:
http://dev.mysql.com/doc/refman/5.0/en/char.html

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

费马大定理,即将被AI攻克?而且整件事最意味深长的地方在于,AI即将解决的费马大定理,正是为了证明AI无用。曾经,数学属于纯粹的人类智力王国;如今,这片疆土正被先进的算法所破译,所践踏。图片费马大定理,是一个「臭名昭著」的谜题,在几个世纪以来,一直困扰着数学家们。它在1993年被证明,而现在,数学家们有一个伟大计划:用计算机把证明过程重现。他们希望在这个版本的证明中,如果有任何逻辑上的错误,都可由计算机检查出来。项目地址:https://github.com/riccardobrasca/flt

标题:深入了解PyCharm:删除项目的高效方式近年来,Python作为一种强大而灵活的编程语言,受到越来越多开发者的青睐。在Python项目的开发中,选择一个高效的集成开发环境至关重要。PyCharm作为一款功能强大的集成开发环境,为Python开发者提供了诸多便利的功能和工具,其中包括快速、高效地删除项目目录。下面将着重介绍如何使用PyCharm中的删除

简单易懂的PyCharm项目打包方法分享随着Python的流行,越来越多的开发者使用PyCharm作为Python开发的主要工具。PyCharm是功能强大的集成开发环境,它提供了许多方便的功能来帮助我们提高开发效率。其中一个重要的功能就是项目的打包。本文将介绍如何在PyCharm中简单易懂地打包项目,并提供具体的代码示例。为什么要打包项目?在Python开发

PyCharm是一款功能强大的Python集成开发环境,提供了丰富的开发工具和环境配置,让开发者能够更高效地编写和调试代码。在使用PyCharm进行Python项目开发的过程中,有时候我们需要将项目打包成可执行的EXE文件,以便在没有安装Python环境的计算机上运行。本文将介绍如何使用PyCharm将项目转换为可执行的EXE文件,同时给出具体的代码示例。首

如何在iOS17中的iPhone上制作GroceryList在“提醒事项”应用中创建GroceryList非常简单。你只需添加一个列表,然后用你的项目填充它。该应用程序会自动将您的商品分类,您甚至可以与您的伴侣或扁平伙伴合作,列出您需要从商店购买的东西。以下是执行此操作的完整步骤:步骤1:打开iCloud提醒事项听起来很奇怪,苹果表示您需要启用来自iCloud的提醒才能在iOS17上创建GroceryList。以下是它的步骤:前往iPhone上的“设置”应用,然后点击[您的姓名]。接下来,选择i

react启动项目报错的解决办法:1、进入项目文件夹,启动项目并查看报错信息;2、执行“npm install”或“npm install react-scripts”命令;3、执行“npm install @ant-design/pro-field --save”命令。

作为一个技术博主,了不起比较喜欢各种折腾,之前给大家介绍过ChatGPT接入微信,钉钉和知识星球(如果没看过的可以翻翻前面的文章),最近再看开源项目的时候,发现了一个ChatGPTWebUI项目。想着刚好之前没有将ChatGPT接入过WebUI,有了这个开源项目可以拿来使用,真是不错,下面是实操的安装步骤,分享给大家。安装官方在Github的项目文档上提供了很多中的安装方式,包括手动安装,docker部署,以及远程部署等方法,了不起在选择部署方式的时候,一开始为了简单想着

PyCharm是一款功能强大的Python集成开发环境(IDE),提供了丰富的功能帮助开发者更高效地编写和管理Python项目。在使用PyCharm开发项目的过程中,有时候我们需要删除一些不再需要的项目以释放空间或清理项目列表。本文将详细介绍如何在PyCharm中删除项目,并提供具体的代码示例。如何删除项目打开PyCharm,进入项目列表界面。在项目列表中,
