Hibernate过程小计
- 对实体 "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&characterEncoding=gbk</property>
- F3之后,跳到了"需要附加jar或者zip文件"的黑白页面去了,需要做的就是将从官网上面下载的zip文件"attache"即可;记得当年MINA也有同样问题,处理方式也一样,其实查看解压文件,其实文件结构是基本一样的:
- 在开始使用配置文件配置Hibernate的映射关系,后来改为声明式的;但是运行时发现了"org.hibernate.MappingException: Unknown entity XXX",后来确定是因为在cfg.xml中mapping节点需要做调整:
<mapping resource="com/historycreator/hibernate/Event.hbm.xml" />修改为
<mapping class="com.historycreator.hibernate.Event"/> - 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来如何将返回值进行类型转换; - 如果是需要对返回的Query/SQLQuery对象进行操作,需要使用list()方法获得元素列表:
for(Object item: sqlQuery.list()){
Test t = (Test)item; ...
} - 下午使用Hibernate进行构建SFS的数据库操作,但是发现了一个异常"Unknown table 'system_sequences' in information_schema",说是数据库方言错误;后来把*.cfg.xml里面的"dialect"Property注释掉,问题解决;所谓方言其实就是你的数据库种类以及具体类型,比如当时我是用的是Mysql里面的InnoDB模式,于是方言应该设置为:org.hibernate.dialect.MySQLInnoDBDialect(之前设置为H2Dialect);
- 在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结合在一起了; - akka组件貌似很牛逼的样子 http://akka.io/ ;
- Hibernate拥有"正向工程"的功能,cfg.xml中hbm2ddl的Property,如果设置为create,那么当检测到不同,将会删掉表(schema),重新创建;validate,将会在运行时报错(在初始化sessionFactory的节点上面);update则是更新表结构(如果数据库字段比Entity多,将什么也不做,这样处理可能是因为数据库字段多不会报错,大不了值为空,但是如果Entity字段多,声明的字段值将没有地方保存);如果你不想使用此功能,就注释掉这个节点;正向工程其实和Entity Framework的Code-First很像;
- 读代码的时候看到动物快跑Hibernate的session事务处理机制是通过getTransaction()获得Transaction信息,然后try...catch中对trans对象进行rollback()操作,在finally中调用HibernateUtil的closeSession();这样处理感觉会更加完整;
- HibernateUtil中的创建session是放置在localThread上面的,为什么要这么做呢?closeSession的时候,读取的也是从当前线程读取;难道说如果HibernateUtil是设计被多线程访问(屁话,伦家都是static好不好),通过这种方式保证session在各个线程间是独立的;看到了一个死贴上面讲述都是:如果不适用localThread,土的掉渣的方式就是创建一个HashMap,以当前线程做Key,value放置响应对象;另外如果想要在一个LocalThread里面放置多个东东,可以向里面放置一个Hashtable/Map即可;
- 今天上午尝试使用多线程进行测试Hibernate的Util类的时候,发现了对于取最大+1获得主键值的方式还是有很大并发问题,获得了一样的主键值,插入的时候报错了;看来还是应该扔给系统来做这个自增长,自己来维护就不可以简单地取最大+1,而是要提供一个static的资源库,对于一个加锁变量进行+1取最大;
- 刚才尝试了一下使用AtomicInteger来进行控制,static块中从数据库中读取最大值,之后查处都是通过这个原子整型的incrementAndGet()方法进行获取+1值,完美的避免的并发问题;
Hibernate过程小计的更多相关文章
- SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,合计,小计
表结构: CREATE TABLE [dbo].[Students]( ,) NOT NULL, ) NULL, [Sex] [int] NOT NULL, ) NULL, ) NULL, , ) N ...
- PB gird类型数据窗口 设置分组、分组小计、合计
今天遇到一个需求,gird表格数据如下: 部门 类型 数据 A 类型1 1 A 类型2 2 B 类型1 3 B 类型2 4 合计 10 实际需要显示的结果为: 部门 ...
- 简单的angular购物车商品小计
<!DOCTYPE html> <html lang="en" ng-app="shopApp"> <head> <m ...
- C#给DataTable添加序号、C#给DataTable添加合计、小计
/// <summary> /// 给DataTable添加序号 /// </summary> /// <param name= ...
- SAP ALV中同一列的不同行显示不同的小数位,并能够总计,小计
物料数量字段,根据物料类型的不同,来显示不同的小数位:要求有点苛刻: 首先,要能够总计和小计的话,这一列的字段类型必须是数值类型. 这样的话,就不能通过截取的方式改变不同行的小数位. 以下是两种思路: ...
- 每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
2013-8-20 1. SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析) 在实际的项目开发中有很多项目都会有报表模块,今天就通过一个小的SQL ...
- VMProtect使用小计【一】
文章列表 VMProtect使用小计[一] – 初次使用VMProtect使用小计[二] – 加壳查看VMProtect使用小计[三] – 权限管理 说明 VMProtect的功能我就不说了,详情大家 ...
- 用SQL实现统计报表中的"小计"与"合计"的方法详解
本篇文章是对使用SQL实现统计报表中的"小计"与"合计"的方法进行了详细的分析介绍,需要的朋友参考下 客户提出需求,针对某一列分组加上小计,合计汇总.网上找 ...
- 【IOS实例小计】今日开贴,记录我的ios学习生涯,留下点滴,留下快乐,成荫后人。
今天开贴来记录自己的ios学习过程,本人目前小白一个,由于对ios感兴趣,所以开始学习,原职java程序,呵呵,勿喷. 本次的[ios实例小计]主要参考一文http://blog.sina.com.c ...
随机推荐
- linux 系统磁盘分区之fdisk
对于学习磁盘分区,通常学习的都是fdisk命令 当然,对于小于2TB的磁盘,我们基本上是使用fdisk命令进行分区 下面就简单介绍一下fdisk操作磁盘的基本命令和场景模拟 常用命令介绍 fdis ...
- HD1285(拓扑排序)
package cn.hncu.dataStruct.search.topSort; import java.util.Scanner; public class Hdu1285 { static S ...
- java注解研究
注解作用 常见的作用有以下几种: 生成文档.这是最常见的,也是java 最早提供的注解.常用的有@see @param @return @author等. 跟踪代码依赖性,实现替代配置文件功能.比较常 ...
- html笔记04:在html之中导入css两种常见方法
1.导入式: <html> <head> <title></title> <style type="text/css"> ...
- react 组件开发
参考资料 https://toddmotto.com/react-create-class-versus-component/ React-Native的代码规范,React其实也基本一样~~ htt ...
- 关于js原型的面试题
今天遇到关于javascript原型的一道面试题,现分析下: 原题如下: function A(){ } function B(a){ this.a = a; } function C(a){ if( ...
- 安卓蓝牙技术Bluetooth使用流程(Bluetooth详解)
一:蓝牙设备之间的通讯首要包含了四个进程 设置蓝牙设备 寻觅局域网内也许或许匹配的设备 衔接设备 设备之间的数据传输 二:详细编程完结 1. 发动蓝牙功用 首要经过调用静态办法getDefaultAd ...
- 删除主目录下的.ssh目录下文件对boot2docker启动影响
现象: 1) boot2docker ssh需要输入密码 2) boot2docker start 或 up 需要输入密码 解决方法: 1)删除 /Users/sunzhaoyu/.boot2dock ...
- centos6.5 apache+tomcat结合 负载均衡
一. 负载均衡:根据 uri 表达式把请求分发给各个服务器处理.如:/*.jsp = lb_s 就是说把所有jsp请求交给lb_s , 当然它是个Tomcat. 二. 安装配置mod_jk m ...
- Objective-c中autorelease的释放时机
如果你使用过MRR,autorelease这个关键字应该是太熟悉了,每次在我们生成一个新的对象返回时,都需要向这个对象发送autorelease消息,目的是为了延时释放创建的对象.那到底是在什么时候, ...