好久没写了,都忘记博客了,趁着现在还在公司,写的东西是经过验证的,不是在家凭记忆力写的,正确率有保障,就说说最近遇到的一件事情吧。

  以前一直用的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实体类字段与数据库关键字冲突的问题的更多相关文章

  1. Mybaits解决实体类字段与数据库字段不一致问题

    public class Employee { private Integer id; private String lastName; private String email; private S ...

  2. spring+hibernate实体类注解详解(非原创) + cascade属性取值

    @Entity //继承策略.另一个类继承本类,那么本类里的属性应用到另一个类中 @Inheritance(strategy = InheritanceType.JOINED ) @Table(nam ...

  3. Eclipse从数据库逆向生成Hibernate实体类和映射文件(Eclipse插件系列之HibernateTools)

    ♣下载安装Eclipse插件(HibernateTools) ♣Eclipse连接数据库(Mysql5.7) ♣新建hibernate.properties和hibernate.cfg.xml文件 ♣ ...

  4. eclipse从数据库逆向生成Hibernate实体类

    做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再“自己”建立一变VO.意思是,在项目设计时,要么 ...

  5. 06.Hibernate实体类生命周期

        前言:Session接口是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的增删查改方法,而且Session具有一个缓存它是Hibernate的一级缓存.站在持久化层的角度 ...

  6. [转]eclipse借助hibernate tool从数据库逆向生成Hibernate实体类

    如何从数据库逆向生成Hibernate实体类呢??? 1. 首先,要在eclipse中采用自带的数据库管理器(Data Management),连通你的数据库: 然后选择数据库,这里用的oracle, ...

  7. (转) Eclipse通过HibernateTools实现逆向生成Hibernate实体类

    背景:工作中使用Hibernate进行持久化的开发工作,所以有必要详细了解这方面的知识. ps:这里有个问题就是刷新表的时候速度太慢了.还不如自己手动去创建.如果表太多倒是可以采取批量生成的策略. 在 ...

  8. Mybatis插入实体类字段为关键字解决方案

    1. Mybatis插入实体类字段为关键字解决方案 1.1. 前言 可能你插入字段为关键字时报如下错误,且字段名不适合改变 You have an error in your SQL syntax; ...

  9. mysql下sql语句 update 字段=字段+字符串

    mysql下sql语句 update 字段=字段+字符串   mysql下sql语句令某字段值等于原值加上一个字符串 update 表明 SET 字段= 'feifei' || 字段; (postgr ...

随机推荐

  1. ResultMap

    Mybatis 数据库字段和对象属性的映射 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  2. C++11多元组类别

    [C++11多元组类别] 多元组可被视为是 struct 其数据成员的一般化.底下是一个多元组类别的定义和使用情况: 我们可以定义一个多元组类别对象 proof 而不指定其内容,前提是 proof 里 ...

  3. Struts ForwardAction Example

    In Struts MVC model, you have to go thought the Action Controller to get a new view page. In some ca ...

  4. [iOS微博项目 - 3.2] - 发送微博

    github: https://github.com/hellovoidworld/HVWWeibo   A.使用微博API发送微博 1.需求 学习发送微博API 发送文字微博 发送带有图片的微博   ...

  5. C语言中字符数组和字符串指针分析

    这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...

  6. [Java线程] Java线程池ExecutorService

    示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...

  7. 谈Android四大组件之Service篇

    Service简介 Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序.Service必须在AndroidManifest.xml中声明 ...

  8. Adding Multithreading Capability to Your Java Applications

    src: http://www.informit.com/articles/article.aspx?p=26326&seqNum=3 Interrupting Threads A threa ...

  9. KVO机制

    KVO,全称为Key-Value Observing,是iOS中的一种设计模式,用来监测对象的某些属性的实时变化情况并作出响应 首先,假设我们的目标是在一个UITableViewController内 ...

  10. jeecg团队招新人(5人)

    jeecg团队招新人(5人) http://www.jeecg.org/forum.php? mod=viewthread&tid=2046&page=1&extra=#pid ...