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. Android 颜色渲染(七) RadialGradient 环形渲染实现水波纹效果

    利用环形渲染我们可以做到什么? 其实很多都是非常常见的,比如上一篇实现的帮帮糖效果, 彩色的热气球,比如这里要讲到的水波纹效果,或者也可以理解为扩散色渲染效果 首先看一下效果图: 轻触屏幕,即可看到对 ...

  2. Offer是否具有法律效力?

    版权声明:原创作品,同意转载,转载时请务必以超链接形式标明文章原始出版.作者信息和本声明.否则将追究法律责任.本文地址: http://blog.csdn.net/jobchanceleo/archi ...

  3. cocos2d-x 3.0 Armature jsb 初体验

    有段时间没有写游戏代码了,这回来主要任务是要用jsb构建一个aprg动作游戏,看到3.0官方已经绑定好了armature的js函数,先来体验一把 3.0新建项目比2.2方便了很多,在终端运行tools ...

  4. Spring + JDK Timer Scheduler Example--reference

    http://www.mkyong.com/spring/spring-jdk-timer-scheduler-example/ In this example, you will use Sprin ...

  5. mysql 如何修改字符串为 utf8

    1.命令行输入mysl 密码之后,然后输入 status可以查看当前的编码 2.来到安装目录X:\%path%\MySQL\MySQL Server 5.0\bin\MySQLInstanceConf ...

  6. 从数组中随机取n条不重复的数据

    工作中经常遇到有关数组的一些操作 1. 从数据中随机取n条不重复的数据 (PS:下面的S.each是KISSY.each方法,大家可以改为for循环) /* 1 从数组arr中随机取n条不重复的数据 ...

  7. 在网页中添加分享到微信、QQ、微博

    参考地址:http://www.bshare.cn/help/installAction 在上面的地址中: 1.可选择分享到的位置,如QQ.微信.微博等 2.按钮的样式.悬浮或者以横幅的方式自己找位置 ...

  8. IE6下Png透明最佳解决方案(推荐) Unit PNG Fix

    引自:http://www.yeeyan.org/articles/view/98510/67784 网络上解决IE6下Png透明解决方案有很多,例如 IE PNG Fix from TwinHeli ...

  9. unity3d最新面试题与参考答案汇总

    1.在类的构造函数前加上static会报什么错?为什么? 构造函数格式为 public+类名,如果加上static会报错(静态构造函数不能有访问修饰符)原因:静态构造函数不允许访问修饰符,也不接受任何 ...

  10. struts2 I18n问题 国际化

    java国际化 1.了解缺省Locale是由操作系统决定的,Locale是由语言和国家代码组成 2.国际化资源文件是由baseName+locale组成,如:MessageBundle_en_US.p ...