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中文网

TAG标签:数据库表项目

mysql dialect配置_一步一步升级配置14:Mysql数据库,hibernate.dialect使用MySQL5_MySQL相关推荐

  1. mysql dialect配置_一步一步升级配置14: Mysql数据库,hibernate.dialect 使用MySQL5Dialect 替代 MySQLDialect...

    一步一步升级配置14:Mysql数据库,hibernate.dialect使用org.hibernate.dialect.MySQL5Dialect替代org.hibernate.dialect.My ...

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

    Hibernate 一步一步升级配置14:Mysql数据库,hibernate.dialect使用org.hibernate.dialect.MySQL5Dialect替代org.hibernate. ...

  3. docker mysql开发环境_跟我一步一步用Docker搭建Beimi游戏服务端开发环境

    跟我一步一步用Docker搭建Beimi游戏服务端开发环境 Stone 摘要 本文为java 0基础的小伙伴介绍如何用Docker搭建开发环境.如果不关心过程直接可 跳到本文最后取代码. 关键步骤为: ...

  4. mysql slave 详细配置_进击的MysqlSlave环境搭建及配置

    一)环境拓扑今天讨论的是mysql集群这一块,资源如下所示:二)Mysql安装配置这里不一一赘述,可以选择源代码编译安装,也可以参考我之前的一篇博文"懒人"速成 一)环境拓扑 二) ...

  5. wamserver怎么把mysql找回来_将php连接wampserver自带的MySQL数据库 所遇到各种问题解决办法...

    将php连接到MySQL数据库的方法有很多,在这里我使用的是mysqli_connect方法, 此博客所解答的问题汇总: 1.wampserver服务器离线但图标为正常绿: 2.wampserver ...

  6. mysql sqlserver对比_很用心的写了 9 道 MySQL 面试题

    MySQL 一直是本人很薄弱的部分,后面会多输出 MySQL 的文章贡献给大家,毕竟 MySQL 涉及到数据存储.锁.磁盘寻道.分页等操作系统概念,而且互联网对 MySQL 的注重程度是不言而喻的,后 ...

  7. anaconda如何更改环境配置_手把手教新手安装Anaconda配置开发环境

    Anaconda是针对Python的集成环境,它已经成为全球数千万数据科学从业人员必备的开发工具,帮助人们有效地解决数据科学和机器学习相关地问题.如果你想从事数据科学和机器学习的工作,可以从本文开始, ...

  8. linux mysql恢复数据_删库不跑路详解MySQL数据恢复

    作者:程淇铭 出处:https://segmentfault.com/a/1190000020116271 日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么 ...

  9. linux pclint配置_代码静态分析工具PC-LINT安装配置

    PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器.它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误. C语言的灵活性带来了代码效 ...

最新文章

  1. python语音播报-使用pyttsx3实现python语音播报
  2. Java高级开发工程师面试笔记
  3. 华为交换机在Telnet登录下自动显示接口信息
  4. mysql bin oct_python 讲解进制转换 int、bin、oct、hex
  5. [CodeForces332E]Binary Key
  6. AgreementMaker:Efficient Matching for Large Real-World 翻译
  7. 【情感分析】情感分析研究的新视野
  8. Web页面的生命周期函数
  9. android qq图片分享到朋友圈,微信分享 QQ分享直接展示视频或图片 分享图片 分享视频...
  10. 深度学习图像分类(十四): EifficientNet系列(V1, V2)
  11. matlab fir带通滤波,基于Matlab的FIR带通滤波器设计与实现
  12. 基于spring websocket实现广播及点对点推送功能
  13. 北京计算机应用中级,计算机应用教程(中级)
  14. 新概念二册 Lesson 15 Good news佳音 ( 陈述句直接引语变间接引语)
  15. Whois 信息与个人隐私
  16. MEncoder的基础用法—6.5. 编码为MPEG格式
  17. 两个PDF怎么合成在一起
  18. Ai-WB2模组基于TCP的MQTT连接服务器使用示例
  19. 一名菜鸟程序猿对前端的简单理解及介绍
  20. 名帖73 柳公权 楷书《玄秘塔碑》

热门文章

  1. 花开记春,花落记秋,早已忘却岁月悠悠。曲终人散,花亦垂首,空留旧人昔日颜容。
  2. 仿微信朋友圈 发圈时间展示
  3. 无敌的服务注册中心Spring CloudAlibaba Nacos不进来看一看吗?
  4. 发展型机器人:由人类婴儿启发的机器人. 导读
  5. 浅浅记录一下挂载阿里云盘到本地
  6. 计算机检索实习报告,计算机信息检索实习报告.doc
  7. 4月21日王者服务器为什么会维护中,王者荣耀:4.15-4.21王者新鲜事
  8. POI移动sheet页顺序
  9. insight数据库丁香园简介
  10. EF Core反向工程