关于mysql下hibernate实体类字段与数据库关键字冲突的问题
好久没写了,都忘记博客了,趁着现在还在公司,写的东西是经过验证的,不是在家凭记忆力写的,正确率有保障,就说说最近遇到的一件事情吧。
以前一直用的oracle数据库,这次项目我负责的模块所在的系统是用的mysql数据库,结果当初建表时候,字段什么的全靠百度,实在是英语不行,然后有个字段叫usage,是mysql数据库的关键字,当时自己测试时候就发现了,但是想着我只是sql语句,加下``,一样可以用,所以就没引起重视。
结果一期已经上线了,现在对这个表要进行其他的维护,才发现用hibernate直接进行增删改时候出了问题,因为它生成的语句肯定是不带``这个进行转义的,而这时候如果你又不想改实体类不想改表字段,那么只需要在实体类配置文件中加上``即可。
具体演示代码如下:
1.初始配置文件:
<hibernate-mapping>
<class name="com.entity.test" table="test">
<id column="id" name="id" type="java.lang.Long">
<generator class="native"/>
</id>
<property column="usage" length="1" name="usage" type="java.lang.String"/>
</class>
</hibernate-mapping>
在这种配置下,直接针对整个实体类进行操作会报错,就是那啥xxx 'near usage xxx那些东西,就是usage附近有错误,具体的英文不行我也看不懂,只知道它引起。
2.更改后配置文件
<hibernate-mapping>
<class name="com.cnnct.test" table="test">
<id column="id" name="id" type="java.lang.Long">
<generator class="native"/>
</id>
<property column="`usage`" length="1" name="usage" type="java.lang.String"/>
</class>
</hibernate-mapping>
这样更改后,无需更改其他东西,照常使用即可,那两个`的位置是通常键盘下,数字键1的左边的那个,和~一个键位的,而不是单引号,这个别弄错了。
接下来是题外话,虽然有了这个解决方案,但是最后还是无奈的改了字段,虽然会很麻烦,毕竟一期都已经上线了,而且挺多地方代码用到了这个字段的,也不知道有没有改漏了。之所以不采纳这个解决方案的原因是以后项目进行迭代更替时候,不可避免的有可能还是需要工具类重新生成实体,一般工具生成实体是不会带有``这个的,就会导致报错。然后后来人维护而不是我本人维护,这种错误就比较难找了。
所以总的来说,各位程序猿在定义表结构时候尽量不要用数据库的关键字,定义完字段,感觉有可能是关键字的都先去试一下,免得后面白多这么多功夫。
关于mysql下hibernate实体类字段与数据库关键字冲突的问题的更多相关文章
- Mybaits解决实体类字段与数据库字段不一致问题
public class Employee { private Integer id; private String lastName; private String email; private S ...
- spring+hibernate实体类注解详解(非原创) + cascade属性取值
@Entity //继承策略.另一个类继承本类,那么本类里的属性应用到另一个类中 @Inheritance(strategy = InheritanceType.JOINED ) @Table(nam ...
- Eclipse从数据库逆向生成Hibernate实体类和映射文件(Eclipse插件系列之HibernateTools)
♣下载安装Eclipse插件(HibernateTools) ♣Eclipse连接数据库(Mysql5.7) ♣新建hibernate.properties和hibernate.cfg.xml文件 ♣ ...
- eclipse从数据库逆向生成Hibernate实体类
做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再“自己”建立一变VO.意思是,在项目设计时,要么 ...
- 06.Hibernate实体类生命周期
前言:Session接口是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的增删查改方法,而且Session具有一个缓存它是Hibernate的一级缓存.站在持久化层的角度 ...
- [转]eclipse借助hibernate tool从数据库逆向生成Hibernate实体类
如何从数据库逆向生成Hibernate实体类呢??? 1. 首先,要在eclipse中采用自带的数据库管理器(Data Management),连通你的数据库: 然后选择数据库,这里用的oracle, ...
- (转) Eclipse通过HibernateTools实现逆向生成Hibernate实体类
背景:工作中使用Hibernate进行持久化的开发工作,所以有必要详细了解这方面的知识. ps:这里有个问题就是刷新表的时候速度太慢了.还不如自己手动去创建.如果表太多倒是可以采取批量生成的策略. 在 ...
- Mybatis插入实体类字段为关键字解决方案
1. Mybatis插入实体类字段为关键字解决方案 1.1. 前言 可能你插入字段为关键字时报如下错误,且字段名不适合改变 You have an error in your SQL syntax; ...
- mysql下sql语句 update 字段=字段+字符串
mysql下sql语句 update 字段=字段+字符串 mysql下sql语句令某字段值等于原值加上一个字符串 update 表明 SET 字段= 'feifei' || 字段; (postgr ...
随机推荐
- [转]iSCSI完全指南
[转]iSCSI完全指南 Posted on 2008-04-01 18:57 Tony Zhang 阅读(2102) 评论(0) 编辑 收藏 引:在上世纪末.本世纪初,一提到SAN(Storage ...
- 转】Spark DataFrame小试牛刀
原博文出自于: https://segmentfault.com/a/1190000002614456 感谢! 三月中旬,Spark发布了最新的1.3.0版本,其中最重要的变化,便是DataFrame ...
- 使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露
1.eclipse mat插件的安装 Help->Install new software,如下图,一直下一步即可 2.AndroidStudio dump heap 3.AndroidStud ...
- 2.VS2010C++各种后缀说明
相关资料:"http://blog.csdn.net/kibaamor/article/details/18700607""http://blog.chinaunix.n ...
- Codeforces 161 B. Discounts (贪心)
题目链接:http://codeforces.com/contest/161/problem/B 题意: 有n个商品和k辆购物车,给出每个商品的价钱c和类别t(1表示凳子,2表示铅笔),如果一辆购物车 ...
- CodeForces 711A Bus to Udayland (水题)
题意:给定一个n*4的矩阵,然后O表示空座位,X表示已经有人了,问你是不能找到一对相邻的座位,都是空的,并且前两个是一对,后两个是一对. 析:直接暴力找就行. 代码如下: #pragma commen ...
- Struts2 高危漏洞补丁版本为: Struts 2.3.15.1
Struts2 昨天爆出高危漏洞,黑客利用这个漏洞可以执行任意命令(包括恶意的jsp代码),轻松绕过您的验证系统,登陆您的网站后台,使您的网站后台密码形同虚设!! 目前Struts2官方已经发布了一个 ...
- sudo权限集中管理用法
#定义一组命令集合,名称DBA_CMD,禁止使用的命令前加!即可Cmnd_Alias DBA_CMD = /bin/touch,/bin/mkdir,/sbin/service,/sbin/chkc ...
- How To: Perl TCP / UDP Socket Programming using IO::Socket::INET
http://www.thegeekstuff.com/2010/07/perl-tcp-udp-socket-programming/ In this article, let us discuss ...
- python基于http协议编程:httplib,urllib和urllib2<转>
httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层的封装模块中(urllib,urllib2)使用了它的http实现. httplib.HTTPConnecti ...