当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 data JPA遇到有大写的不规范的MySQL命名字段

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

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

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

JPA的Table注解

如果不使用hibernate映射而使用JPA的Table注解 方式如下 @Table标记表示所映射表的属性,该注释的属性定义如下。 @Target({TYPE}) @Retention(RUNTIME...
  • Truong
  • Truong
  • 2013年10月12日 13:49
  • 2434

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

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

JPA对应的数据库字段大小写问题

数据库中的字段名是ProductName,实体中应当这样写     @Column(name = "productname")     private String productName;...
  • moest
  • moest
  • 2015年08月10日 15:39
  • 2105

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

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

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

首先 你的jpaProperties配置项中要有 update这样就可以直接有对象映射为表结构,实现面向对象向数据库转化。 实体的名字可以和表名字不一样,字段名字和实体的名字也可以不一样。 pa...

SpringBoot JPA 表关联查询

今天给大家介绍一下如何利用JPA实现表关联查询。 今天给大家举一个一对多的关联查询,并且是使用JPA原生的findBy语句实现的。 例子中总共有两个实体类,一个是Floor(商品楼层类),另一个是...

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

转自:blog:http://blog.csdn.net/wocjj/article/details/7415200 查看大小写区分 mysql> show variables like ...

偶然发现mysql的表中字段居然不区分大小写

偶然发现mysql的表中字段居然不区分大小写 这又是让我惊奇引入其他人的博客...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:当JPA遇上MySQL表名全大写
举报原因:
原因补充:

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