一、实体类或属性名与数据库关键字冲突问题
1、实体类名与数据库中的关键字冲突
比如:实体表User与oracle中的系统表冲突
解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="cn.itcast.hibernate.domain">
  6. <class name="User" table="tb_User">
  7. <!-- 对象标示符,类型可以不写,hibernate自己识别 -->
  8. <id name="id" column="id">
  9. <!-- 指定主键生成方式。
  10. native根据方言判定生成主键的方式
  11. -->
  12. <generator class="native"/>
  13. </id>
  14. <property name="name" column="name" />
  15. <property name="birthday"  />
  16. </class>
  17. </hibernate-mapping>

解决方式2:假如与之对应的表是原来有的,不能修改表名,可以在table属性中添加`` (反引号就是1前面的按键,来指定名称)

<class name="User" table="`User`">

2、属性名与数据库关键字冲突问题
解决方式1;在xml中property节点中添加column属性,指定特定的字段

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="cn.itcast.hibernate.domain">
  6. <class name="User" table="tb_User">
  7. <!-- 对象标示符,类型可以不写,hibernate自己识别 -->
  8. <id name="id" column="id">
  9. <!-- 指定主键生成方式。
  10. native根据方言判定生成主键的方式
  11. -->
  12. <generator class="native"/>
  13. </id>
  14. <property name="name" column="name" />
  15. <property name="birthday"  />
  16. </class>
  17. </hibernate-mapping>

解决方式2:不能修改字段名,可以在column属性中添加`` (反引号就是1前面的按键,来指定名称)

<property name="name" column="`name`" />
二、关于hibernate.cfg.xml的所有属性值
可以到hibernate官网下载源码,
hibernate-release-4.2.1.Final\project\etc\hibernate.properties.template

hibernate-release-4.2.1.Final\project\etc\hibernate.properties文件中有所有的可配置的属性值

三、hql的命名参数
例子:
 /**
  * 使用HQL根据name查询方法
  * @param entity
  */
 public static void Query(String name){
  
  Session s = null;
  try {
   s=HIbernateUtil.getSession();
   //HQL:
   //这里的from后面跟的不是表名,而是对象名(类名)
   String hql = "from User as user where user.name=?"; //from Object 支持多态度
   Query query = s.createQuery(hql);
   query.setString(0, name);
   List<User> list=query.list(); //executQuery(); 
   for(User user:list){
    System.out.print(user.getName());
   }
   
   //如果确定数据最多只有一条,可以使用一下的方法简化代码
   User u= (User)query.uniqueResult();
   System.out.print("只有一条数据"+u.getName());
  } finally {
   if(s!=null){
    s.close();
   }
  }
 }
后面的赋值的参数(索引),与?的位置一一相对应。
如果有很多的参数,则方便赋值,很容易出错。
解决方式:使用命名参数:name如:

public static void Query(String name){
  
  Session s = null;
  try {
   s=HIbernateUtil.getSession();
   //HQL:
   //这里的from后面跟的不是表名,而是对象名(类名)//   String hql = "from User as user where user.name=?"; //from Object 支持多态度
   String hql = "from User as user where user.name=:name"; //使用命名参数取代?
   Query query = s.createQuery(hql);
   query.setString("name", name);
   
   //通过Query实现跨数据库的通用分页
   query.setFirstResult(0);//从第多少条开始获取数据
   query.setMaxResults(100);//共取多少条数据
   List<User> list=query.list(); //executQuery(); 
   for(User user:list){
    System.out.print(user.getName());
   }
   
   //如果确定数据最多只有一条,可以使用一下的方法简化代码
   User u= (User)query.uniqueResult();
   System.out.print("只有一条数据"+u.getName());
  } finally {
   if(s!=null){
    s.close();
   }
  }
 }
好处:这样就不依赖位置了,只要名字对应上即可。sql中多次使用同一参数时,一次赋值即可。代码简洁
四、Query接口的分页查询
解释说明:每个数据库都用不同的分页方式,hibernate通过在hibernate.cfg.xml中配置
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property><!-- 方言 -->以识别不同数据库,使低层使用相应的分页方式
//通过Query实现跨数据库的通用分页
   query.setFirstResult(0);//从第多少条开始获取数据
   query.setMaxResults(100);//共取多少条数据
好处:Query接口中的这两个方法,实现了通用的分页方式,增加了程序的可移植性。

ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页的更多相关文章

  1. swoft orm中的坑(针对实体类的属性名称和数据库字段不相等)

    最近在用swoft的orm,发现了一些问题: 首先看下实体类的定义 它的属性名称和所映射的数据库字段名不一致,这个就会导致蛋疼的问题,首先,在我们使用orm的时候,应该使用哪个字段? 我直接说结论,在 ...

  2. 解决SpringDataJpa实体类中属性顺序与数据库中生成字段顺序不一致的问题

    一.在application.yml配置中添加数据库根据实体类自动创建数据库表的配置(这里数据库采用MySQL数据库) jpa: database: MYSQL show-sql: true #Hib ...

  3. [jnhs]教训之jsp页面无法用jstl取值的坑.真他妈的奇葩,实体类的属性名不能用大写

    结果页面永远都是空 调试发现,数据正常的塞进去了 问题解决: https://zhidao.baidu.com/question/570584436.html 实体类的属性名,首字母不能大写,改成小写 ...

  4. EF + WCF学习笔记——EF实体类序列化

    项目中如果 EF + WCF 结合使用,模式应该是EF负责读取数据库,传递数据对象给WCF,WCF再将这些对象传送给客户端.因为WCF传送的对象需要序列化,而EF默认生成的对象并没有序列化,很可能会出 ...

  5. java实体类的属性名首字母不能大写,不然el表达式无法取值

    摘要:Java命名规范中,实体类属性名以小写字母开头,但并没有说不能以大写字母开头,然而事实告诉我,大写真不行 https://www.cnblogs.com/jnhs/p/10025757.html

  6. Java实体类的属性类型与数据库表字段类型对应表

    原文地址:https://blog.csdn.net/lyhjava/article/details/50562786 Java中的数据类型和SQL中的数据类型有很多不一样,需要仔细区分,不然易在开发 ...

  7. MyBatis学习笔记(四)——解决字段名与实体类属性名不相同的冲突

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演 ...

  8. 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    [转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...

  9. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...

随机推荐

  1. 二分图匹配(KM算法)n^3 分类: ACM TYPE 2014-10-01 21:46 98人阅读 评论(0) 收藏

    #include <iostream> #include<cstring> #include<cstdio> #include<cmath> const ...

  2. HDU 1028Ignatius and the Princess III(母函数简单题)

     Ignatius and the Princess III Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d ...

  3. 功率单位mW 和 dBm 的换算

    无线电发射机输出的射频信号,通过馈线(电缆)输送到天线,由天线以电磁波形式辐射出去.电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率),并通过馈线送到无线电接收机.因此在无线网络的工程 ...

  4. Linux软件安装方法小结(附:rpm详解)(转载)

    在使用Linux系统的过程中,软件包的安装是避免不了的,在Linux下,软件安装程序的种类很多,安装方法也各式各样,(舒适性自然比不上windows :-))不过我们常见的软件包有两种: 1)含有软件 ...

  5. jquery的ajax同步和异步的理解及示例

    之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题.最近的项目用了到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去 ...

  6. Grid分组汇总

    Ext.onReady(function () {                Ext.define('personInfo', {                    extend: 'Ext. ...

  7. 直面Javascript面试题算法思路

    一.字符串遍历类 1.获取符合条件的字符 思路:一般使用正则表达式会比遍历字符串简单.a=str.match(reg),a即为所得. 例子:a.判断字符串是否是这样组成的,第一个必须是字母,后面可以是 ...

  8. HDU 4287 Intelligent IME(string,map,stl,make_pair)

    题目 转载来的,有些stl和string的函数蛮好的: //numx[i]=string(sx); //把char[]类型转换成string类型 // mat.insert(make_pair(num ...

  9. (转)Android之ListView原理学习与优化总结

    转自: http://jishu.zol.com.cn/12893.html 在整理前几篇文章的时候有朋友提出写一下ListView的性能优化方面的东西,这个问题也是小马在面试过程中被别人问到的….. ...

  10. C#反射技术的相关使用方法

    1.获取同一程序集的类型实例 无参数构造函数 Type t=Type.GetType("AppCode.Employee"); object emp=t.Assembly.Crea ...