Hibernate in Action读书笔记:读取持久化对象

Session这个持久化管理器提供的读取具有唯一标示符identity的对象的方法,get,load,它们的区别是:

(1)load方法当在session的缓存或数据库中读取不到对象时,它会发出异常,而get则不会,它会返回null。

(2)load方法有可能会返回一个代理对象(proxy),代理对象只是一个占位符,当首次访问代理对象时,代理对象会触发对被代理对象——也即真实对象的读取。

 

查询的两种不同方式:

HQL语言与Criteria API,Cr[......]

Read more

Posted in 读书笔记 | Tagged | Leave a comment

一条SQL引发的血案

最近在对原来的系统功能进行一些页面的优化,其中一个功能需要对原先的业务逻辑进行较大的改动,因此我一开始就对其抱有谨慎的态度,本来想将其独立出来发布,以免出现问题导致一起提交的其它功能都无法发布,但是最后还是没有这么做。当时想,虽然改动较大,但只要仔细做好自测,应该不会有太大的问题。

 

开发环境测试,没问题!发到beta环境测试,还是没问题!最后上IDC,问题来了,打开页面非常慢,几乎是假死状态,纳闷中=。=!想到过可能会出现问题,但没想到会是速度慢,因为速度慢十之八九是因[......]

Read more

Posted in 数据库 | Tagged , | Leave a comment

Hibernate命名策略NamingStrategy的使用

在hibernate的使用中会遇到这么一个问题,POJO实体类名与表名如何映射?POJO的变量到表的列名如何映射?如果你采用的是为每个实体的映射写一个xml配置文件,当然可以直接在其中指定其映射关系,但是一般情况下,我们不会这么做,而且你可能也想要自己控制它们的映射关系。

 

对于这种情况,Hibernate为我们提供了NamingStrategy,NamingStrategy中提供了一些接口允许我们改变上述映射关系,具体的API文档参考:http://docs.jboss[......]

Read more

Posted in J2EE | Tagged | Leave a comment

hibernate源码分析——初始流程

如果要写一个Hibernate的Hello World程序,我们大概需要做这么几件事情:

1. 创建对应表的实体类并编写其到对应表的映射文件;

2. 编写hibernate的配置文件,默认是hibernate.cfg.xml,你当然可以用其它的名字,只需自己传递配置文件名称给Configure就好;

3. 编写具体操作数据库的dataservice;

对于第三步,又可分为:创建SessionFactory;获取session;通过session对象执行数据库操作;等等[......]

Read more

Posted in J2EE | Tagged | Leave a comment

Hibernate In Action读书笔记一事务隔离级别

Hibernate提供了四种事务隔离级别,在详细解释它们之前,需要先了解几个概念:

(1)丢失更新,两个事务同时更新相同的数据,由于第二个事务被取消,导致两个更新都丢失。这发生在没有实现任何锁的系统中。

(2)脏读,某个事务中读取了被另一个事务改变了但还没有提交的数据。

(3)不可重复读,事务读取了一行数据两次,可是两次的数据是不一样的,如:有另一个事务在这两次读取的中间,向此行写入了数据并提交到数据库。

(4)第二类丢失更新问题,这属于不可重复读的一个特例,假设有两个并[......]

Read more

Posted in 读书笔记 | Tagged | Leave a comment