1. 对实体 "XXX" 的引用必须以 ';' 分隔符结尾(需要对分号进行编码)

    <property name="connection.url">jdbc:mysql://localhost:3306/test2?useUnicode=true;characterEncoding=gbk</property>

    <property name="connection.url">jdbc:mysql://localhost:3306/test2?useUnicode=true&amp;characterEncoding=gbk</property> 

  2. F3之后,跳到了"需要附加jar或者zip文件"的黑白页面去了,需要做的就是将从官网上面下载的zip文件"attache"即可;记得当年MINA也有同样问题,处理方式也一样,其实查看解压文件,其实文件结构是基本一样的:
  3. 在开始使用配置文件配置Hibernate的映射关系,后来改为声明式的;但是运行时发现了"org.hibernate.MappingException: Unknown entity XXX",后来确定是因为在cfg.xml中mapping节点需要做调整:
    <mapping resource="com/historycreator/hibernate/Event.hbm.xml" />修改为
    <mapping class="com.historycreator.hibernate.Event"/>
  4. Hibernate的查询有两种方式,一种通过指定Id的方式直接获得(session.byId(Test.class).load(16), byId的参数是声明类,load的参数是Id值);还有一种方式是通过SQL方式,SQL方式又分为两种:一种是通过HSQL的方式
    Query query = session.createQuery("from Test where t1=:t1");
    query.setParameter("t1", 16);
    Test entity = (Test)query.uniqueResult();
    需要注意的是:HQL的方式from后面跟着的是实体的名称(推测Hibernate将会根据实体声明的信息找到对应的映射表名形成最终的SQL文);HQL中的t1=:t1是指定t1字段参数名为"t1",参数值是通过"query.setParameter来进行指定;
    第二种方式是使用原生的SQL:
    SQLQuery sqlQuery = session.createSQLQuery("select * from test1 where t1=:t1")
    sqlQuery.setParameter("t1", 16);
    sq1Query.addEntity(Test1.class);
    Test entity2 = (Test)sqlQuery.uniqueResult();
    使用原生的SQL,创建的方法不同(createSQLQuery方法),而且还需要添加一步:sqlQuery.addEntity,来告诉session来如何将返回值进行类型转换;
  5. 如果是需要对返回的Query/SQLQuery对象进行操作,需要使用list()方法获得元素列表:
    for(Object item: sqlQuery.list()){
        Test t = (Test)item; ...
    }
  6. 下午使用Hibernate进行构建SFS的数据库操作,但是发现了一个异常"Unknown table 'system_sequences' in information_schema",说是数据库方言错误;后来把*.cfg.xml里面的"dialect"Property注释掉,问题解决;所谓方言其实就是你的数据库种类以及具体类型,比如当时我是用的是Mysql里面的InnoDB模式,于是方言应该设置为:org.hibernate.dialect.MySQLInnoDBDialect(之前设置为H2Dialect);
  7. 在Hibernate里面配置表级别(数据库连接级别在*.cfg.xml中进行配置)映射有两种方式,一种是*.hbm.xml定义方式,还有一种就是声明的方式;这两种方式采用实在*.cfg.xml中的mapping节点中声明的,但是注意,如果是xml文件配置方式,mapping节点使用的属性是resource,但是声明方式属性使用的是class:
    <mapping resource="com/alibaba/conf/event.xml"/>
    <mapping class="com.alibaba.entity.event"/>
    还有一种貌似更加牛逼的方式就是声明一个包体名称,下面的类无条件的将会被认为是采用声明/配置方式:<mapping package="com.alibaba.entity"/>,但是经过验证毛用没有,非常简单,hibernate本身并没有探测功能(比如你新添加了一个类,自动探测到),如果想要自动探测,只能是和Spring结合在一起了;
  8. akka组件貌似很牛逼的样子 http://akka.io/ ;
  9. Hibernate拥有"正向工程"的功能,cfg.xml中hbm2ddl的Property,如果设置为create,那么当检测到不同,将会删掉表(schema),重新创建;validate,将会在运行时报错(在初始化sessionFactory的节点上面);update则是更新表结构(如果数据库字段比Entity多,将什么也不做,这样处理可能是因为数据库字段多不会报错,大不了值为空,但是如果Entity字段多,声明的字段值将没有地方保存);如果你不想使用此功能,就注释掉这个节点;正向工程其实和Entity Framework的Code-First很像;
  10. 读代码的时候看到动物快跑Hibernate的session事务处理机制是通过getTransaction()获得Transaction信息,然后try...catch中对trans对象进行rollback()操作,在finally中调用HibernateUtil的closeSession();这样处理感觉会更加完整;
  11. HibernateUtil中的创建session是放置在localThread上面的,为什么要这么做呢?closeSession的时候,读取的也是从当前线程读取;难道说如果HibernateUtil是设计被多线程访问(屁话,伦家都是static好不好),通过这种方式保证session在各个线程间是独立的;看到了一个死贴上面讲述都是:如果不适用localThread,土的掉渣的方式就是创建一个HashMap,以当前线程做Key,value放置响应对象;另外如果想要在一个LocalThread里面放置多个东东,可以向里面放置一个Hashtable/Map即可;
  12. 今天上午尝试使用多线程进行测试Hibernate的Util类的时候,发现了对于取最大+1获得主键值的方式还是有很大并发问题,获得了一样的主键值,插入的时候报错了;看来还是应该扔给系统来做这个自增长,自己来维护就不可以简单地取最大+1,而是要提供一个static的资源库,对于一个加锁变量进行+1取最大;
  13. 刚才尝试了一下使用AtomicInteger来进行控制,static块中从数据库中读取最大值,之后查处都是通过这个原子整型的incrementAndGet()方法进行获取+1值,完美的避免的并发问题;

Hibernate过程小计的更多相关文章

  1. SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,合计,小计

    表结构: CREATE TABLE [dbo].[Students]( ,) NOT NULL, ) NULL, [Sex] [int] NOT NULL, ) NULL, ) NULL, , ) N ...

  2. PB gird类型数据窗口 设置分组、分组小计、合计

    今天遇到一个需求,gird表格数据如下:  部门  类型 数据   A  类型1  1  A  类型2  2  B  类型1  3  B  类型2  4   合计 10 实际需要显示的结果为:  部门 ...

  3. 简单的angular购物车商品小计

    <!DOCTYPE html> <html lang="en" ng-app="shopApp"> <head> <m ...

  4. C#给DataTable添加序号、C#给DataTable添加合计、小计

    /// <summary>        /// 给DataTable添加序号        /// </summary>        /// <param name= ...

  5. SAP ALV中同一列的不同行显示不同的小数位,并能够总计,小计

    物料数量字段,根据物料类型的不同,来显示不同的小数位:要求有点苛刻: 首先,要能够总计和小计的话,这一列的字段类型必须是数值类型. 这样的话,就不能通过截取的方式改变不同行的小数位. 以下是两种思路: ...

  6. 每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)

    2013-8-20 1.    SQL查询表的行列转换/小计/统计(with  rollup,with cube,pivot解析) 在实际的项目开发中有很多项目都会有报表模块,今天就通过一个小的SQL ...

  7. VMProtect使用小计【一】

    文章列表 VMProtect使用小计[一] – 初次使用VMProtect使用小计[二] – 加壳查看VMProtect使用小计[三] – 权限管理 说明 VMProtect的功能我就不说了,详情大家 ...

  8. 用SQL实现统计报表中的"小计"与"合计"的方法详解

    本篇文章是对使用SQL实现统计报表中的"小计"与"合计"的方法进行了详细的分析介绍,需要的朋友参考下   客户提出需求,针对某一列分组加上小计,合计汇总.网上找 ...

  9. 【IOS实例小计】今日开贴,记录我的ios学习生涯,留下点滴,留下快乐,成荫后人。

    今天开贴来记录自己的ios学习过程,本人目前小白一个,由于对ios感兴趣,所以开始学习,原职java程序,呵呵,勿喷. 本次的[ios实例小计]主要参考一文http://blog.sina.com.c ...

随机推荐

  1. linux 系统磁盘分区之fdisk

    对于学习磁盘分区,通常学习的都是fdisk命令 当然,对于小于2TB的磁盘,我们基本上是使用fdisk命令进行分区 下面就简单介绍一下fdisk操作磁盘的基本命令和场景模拟 常用命令介绍   fdis ...

  2. HD1285(拓扑排序)

    package cn.hncu.dataStruct.search.topSort; import java.util.Scanner; public class Hdu1285 { static S ...

  3. java注解研究

    注解作用 常见的作用有以下几种: 生成文档.这是最常见的,也是java 最早提供的注解.常用的有@see @param @return @author等. 跟踪代码依赖性,实现替代配置文件功能.比较常 ...

  4. html笔记04:在html之中导入css两种常见方法

    1.导入式: <html> <head> <title></title> <style type="text/css"> ...

  5. react 组件开发

    参考资料 https://toddmotto.com/react-create-class-versus-component/ React-Native的代码规范,React其实也基本一样~~ htt ...

  6. 关于js原型的面试题

    今天遇到关于javascript原型的一道面试题,现分析下: 原题如下: function A(){ } function B(a){ this.a = a; } function C(a){ if( ...

  7. 安卓蓝牙技术Bluetooth使用流程(Bluetooth详解)

    一:蓝牙设备之间的通讯首要包含了四个进程 设置蓝牙设备 寻觅局域网内也许或许匹配的设备 衔接设备 设备之间的数据传输 二:详细编程完结 1. 发动蓝牙功用 首要经过调用静态办法getDefaultAd ...

  8. 删除主目录下的.ssh目录下文件对boot2docker启动影响

    现象: 1) boot2docker ssh需要输入密码 2) boot2docker start 或 up 需要输入密码 解决方法: 1)删除 /Users/sunzhaoyu/.boot2dock ...

  9. centos6.5 apache+tomcat结合 负载均衡

    一. 负载均衡:根据 uri 表达式把请求分发给各个服务器处理.如:/*.jsp = lb_s  就是说把所有jsp请求交给lb_s , 当然它是个Tomcat. 二. 安装配置mod_jk    m ...

  10. Objective-c中autorelease的释放时机

    如果你使用过MRR,autorelease这个关键字应该是太熟悉了,每次在我们生成一个新的对象返回时,都需要向这个对象发送autorelease消息,目的是为了延时释放创建的对象.那到底是在什么时候, ...