0

0

一步一步升级配置14: Mysql数据库,hibernate.dialect 使用MySQL5_MySQL

php中文网

php中文网

发布时间:2016-06-01 13:12:49

|

1612人浏览过

|

来源于php中文网

原创

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

95Shop仿醉品商城
95Shop仿醉品商城

95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we

下载

三.思考:

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工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

7

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

8

2026.02.05

控制反转和依赖注入区别
控制反转和依赖注入区别

本专题整合了控制反转和依赖注入区别、解释、实现方法相关内容。阅读专题下面的文章了解更多详细教程。

11

2026.02.05

钉钉脑图插图教程合集
钉钉脑图插图教程合集

本专题整合了钉钉脑图怎么插入图片、钉钉脑图怎么用相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.02.05

python截取字符串方法汇总
python截取字符串方法汇总

本专题整合了python截取字符串方法相关合集,阅读专题下面的文章了解更多详细内容。

2

2026.02.05

Java截取字符串方法合集
Java截取字符串方法合集

本专题整合了Java截取字符串方法汇总,阅读专题下面的文章了解更多详细操作教程。

1

2026.02.05

java 抽象方法
java 抽象方法

本专题整合了java抽象方法定义、作用教程等内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.05

Eclipse创建jsp文件教程合集
Eclipse创建jsp文件教程合集

本专题整合了Eclipse创建jsp文件、创建jsp项目等等内容,阅读专题下面的文章了解更多详细教程。

26

2026.02.05

java 字符串转数字
java 字符串转数字

本专题整合了java如何字符串转数字相关内容,阅读专题下面的文章了解更多详细教程。

4

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 5.2万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.5万人学习

Django 教程
Django 教程

共28课时 | 4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号