当JPA遇上MySQL表名全大写

转载 2016年05月30日 18:01:12

最近在搞一个HRMS,功能不算复杂,先按下不表。这里说一个魂淡的小问题,很纠结,也很烦人。

公司之前有项目是用MySQL的,是我管的。这次这个项目也不大,就继续用那个MySQL吧。我一直知道MySQL在Linux上有字段名表名等的大小写问题,于是为了避免这个问题,选择了全大写的字段名和表名,心说虽然咱用的是JPA,只要使用注解写清楚表名和字段名是大写的,不也没事么。
实际上证明,想象比生活丰富的多,亲们。我用JPA实现登陆的时候,报错说表不存在,表名是全小写的。接下来,折腾才刚刚开始。此时是上午十点多。
解决这个问题,第一步肯定是改MySQL的cnf,改成不区分大小写,心说这就解决问题了吧。事实证明,图样图森破。。。改成大小写不敏感以后,这个表干脆怎么都访问不了了,不管是大写还是小写,show tables可以看到,但是select的时候怎么折腾都不出来。
无奈,只能改回去。但是表结构我没备份过啊,再装个Oracle又麻烦,怎么办呢?既然MySQL那边解决起来麻烦,我们在Java这想想办法吧。简单的分析一下过程,浏览器点按钮,发起请求到后台,Controller接到请求后通过service找到对应的dao,dao又通过Spring Data找到Hibernate实现的JPA规范,再转化成SQL语句发送给数据库执行。只要能在发送前把表名改成大写就能解决问题了。
那么这个把表名改成大写或者小写,是在哪里执行的呢?不知道同学们还记不记得,JPA对字段有一个转换,a_b会转换成aB。这个当然不是Java内核实现的,这个是Hibernate的JPA实现做的。具体到代码,这个东西是org.hibernate.cfg.ImprovedNamingStrategy,命名规则类。Hibernate实现的这个,就是转换驼峰规则的功能。我注解里表名写的是大写,但是输出的sql语句里是小写,毫无疑问,这里有转换成小写的代码。那么我只要实现一个转换成大写表名的方法就对了。

public class MySQLUpperCaseStrategy extends ImprovedNamingStrategy {

private static final long serialVersionUID = 1383021413247872469L;

@Override
public String tableName(String tableName) {
return tableName.toUpperCase();
}
}

简单又好用,不必改原来的数据库任何配置了。

转自http://xhrtechblog.com/2014/08/24/jpa_uppercase/

spring boot 1.5.4使用JPA,遇到Mysql区分大小写的问题

最近正在开发基于Spring Boot框架的应用,遇到了Mysql区分大小写的问题。开发前期我一直使用本机Windows系统建立的数据库,后来将数据库迁到Linux上,使用大写字母建立的表、字段JPA...
  • OO570741825
  • OO570741825
  • 2017年07月24日 14:48
  • 1492

hibernate 表名大小写,mysql表名忽略大小写

转自:blog:http://blog.csdn.net/wocjj/article/details/7415200 查看大小写区分 mysql> show variables like ...
  • johnstrive
  • johnstrive
  • 2014年12月19日 17:37
  • 5773

hibernate 表 命名策略

Hibernate注释下的自定义架构实现 译者:Tanya   对于Java开发人员,Hibernate 3 annotations提供了非常好的方式来展示域分层。你可以很轻松的通过Hiberna...
  • jackyxwr
  • jackyxwr
  • 2013年02月27日 18:46
  • 4883

PostgreSQL中表名、字段名大小写问题

学习hibernate的时候,数据库用了PostgreSQL,第一节课就抛错,User实体映射没有死活不能导出表。总是提示这一句:          ERROR: syntax error at o...
  • zengchaoyue
  • zengchaoyue
  • 2012年12月10日 20:17
  • 15996

Spring data JPA遇到有大写的不规范的MySQL命名字段

Spring data JPA遇到有大写的不规范的MySQL命名字段
  • leelyliu
  • leelyliu
  • 2016年10月21日 10:45
  • 2547

MySQL大小写敏感问题和命名规范

注:本文大部内容参考自互联网相关文章1.MySQL大小写敏感规则MySQL中,一个库会对应一个文件夹,库里的表会则以文件的方式存放在文件夹内,所以,操作系统对大小写的敏感性决定了数据库和表的大小写敏感...
  • bluishglc
  • bluishglc
  • 2012年06月05日 16:37
  • 24455

在 Spring Boot 中使用 JPA 和 MySQL

在Spring Boot中使用JPA和MySQL最近项目中需要使用到MySQL数据库,在此记录一下Spring Boot中使用JPA进行数据访问的基本过程。 本文的基本开发环境如下:spring-b...
  • xiaoyu90520
  • xiaoyu90520
  • 2017年03月21日 19:47
  • 1085

jpa在mysql中自动创建重复表,只是大小写不同

jpa在mysql中自动创建重复表,只是大小写不同
  • chs_jdmdr
  • chs_jdmdr
  • 2014年10月16日 10:28
  • 1432

jPA自动创建数据库表的一些配置

题目:jPA如何自动创建数据库表(如何将EntityBean自动映射成数据库表,而不需要先创建表再开发应用程序)在persistence.xml里边加入如下的设置语句:  //1:value="cre...
  • gaoge19861207
  • gaoge19861207
  • 2009年10月26日 00:14
  • 8437

JPA设置表名和实体名,表字段与实体字段的对应

首先 你的jpaProperties配置项中要有 update这样就可以直接有对象映射为表结构,实现面向对象向数据库转化。 实体的名字可以和表名字不一样,字段名字和实体的名字也可以不一样。 pa...
  • LQW_java_home
  • LQW_java_home
  • 2016年11月08日 10:06
  • 5328
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:当JPA遇上MySQL表名全大写
举报原因:
原因补充:

(最多只允许输入30个字)