mysql dialect配置_一步一步升级配置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
源码中:
原来在这里,如果长度<=255,那么就创建varchar($1)类型
否则创建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
如果长度<=65535,那么就创建varchar($1)类型
否则创建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
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
mysql dialect配置_一步一步升级配置14: Mysql数据库,hibernate.dialect 使用MySQL5_MySQL相关推荐
- mysql dialect配置_一步一步升级配置14: Mysql数据库,hibernate.dialect 使用MySQL5Dialect 替代 MySQLDialect...
一步一步升级配置14:Mysql数据库,hibernate.dialect使用org.hibernate.dialect.MySQL5Dialect替代org.hibernate.dialect.My ...
- mysql dialect配置_一步一步升级配置14:Mysql数据库,hibernate.dialect使用MySQL5_MySQL
Hibernate 一步一步升级配置14:Mysql数据库,hibernate.dialect使用org.hibernate.dialect.MySQL5Dialect替代org.hibernate. ...
- docker mysql开发环境_跟我一步一步用Docker搭建Beimi游戏服务端开发环境
跟我一步一步用Docker搭建Beimi游戏服务端开发环境 Stone 摘要 本文为java 0基础的小伙伴介绍如何用Docker搭建开发环境.如果不关心过程直接可 跳到本文最后取代码. 关键步骤为: ...
- mysql slave 详细配置_进击的MysqlSlave环境搭建及配置
一)环境拓扑今天讨论的是mysql集群这一块,资源如下所示:二)Mysql安装配置这里不一一赘述,可以选择源代码编译安装,也可以参考我之前的一篇博文"懒人"速成 一)环境拓扑 二) ...
- wamserver怎么把mysql找回来_将php连接wampserver自带的MySQL数据库 所遇到各种问题解决办法...
将php连接到MySQL数据库的方法有很多,在这里我使用的是mysqli_connect方法, 此博客所解答的问题汇总: 1.wampserver服务器离线但图标为正常绿: 2.wampserver ...
- mysql sqlserver对比_很用心的写了 9 道 MySQL 面试题
MySQL 一直是本人很薄弱的部分,后面会多输出 MySQL 的文章贡献给大家,毕竟 MySQL 涉及到数据存储.锁.磁盘寻道.分页等操作系统概念,而且互联网对 MySQL 的注重程度是不言而喻的,后 ...
- anaconda如何更改环境配置_手把手教新手安装Anaconda配置开发环境
Anaconda是针对Python的集成环境,它已经成为全球数千万数据科学从业人员必备的开发工具,帮助人们有效地解决数据科学和机器学习相关地问题.如果你想从事数据科学和机器学习的工作,可以从本文开始, ...
- linux mysql恢复数据_删库不跑路详解MySQL数据恢复
作者:程淇铭 出处:https://segmentfault.com/a/1190000020116271 日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么 ...
- linux pclint配置_代码静态分析工具PC-LINT安装配置
PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器.它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误. C语言的灵活性带来了代码效 ...
最新文章
- C 语言编程 — 高级数据类型 — 枚举
- Traincascade Error: Bad argument (Can not get new positive sample. The most possible reason is insuf
- java接口示例_【基础篇】java-接口及其示例
- mysql @@version_MySQL数据库安装Version5.5
- 以太网基本知识小结(二)
- 检测对抗样本_避免使用对抗性T恤进行检测
- 2020 ICPC NAC
- 视图和表的区别和联系
- Parrot 发布新版本——基于Debian的Linux 发行版
- JavaScript var语句简析
- 链表的节点与指针 (重新理解)
- 我的第一个hbulider项目
- python 3维正态分布图_使用python绘制3维正态分布图的方法
- LINUX——正则表达式
- unable to load Private Key 6572:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\
- Linux与数据库简要说明
- 钉钉小程序编译时提示 ‘dd is not defined‘
- 中文版智能ABC如何移植到英文OS
- 选取一段代码块一下子都回退或前进空一格的快捷键
- Maven 中文文档
热门文章
- oracle 11g的下载、安装、使用。完整版。亲自使用
- 图神经网络(10)- relational GCN
- 【深度强化学习】Advantage Actor-Critic
- Reactor3 Flux 创建
- BaseQuickAdapter刷新列表数据
- JavaWeb学习笔记(一)—— HTML
- 智慧供水大数据平台整体解决方案
- 【天光学术】成本管理论文:路桥施工项目的工程计量和成本控制探讨(节选)
- 2014秋C++ 狗逮耗子之“开口说英语”
- 火爆的智能健身镜,照见互联网健身“新常态”?