Hibernate 学习笔记

好久没有上来留帖子了,原因嘛,主要是因为好久没有和深入的搞过技术了,天天 都在忙着成立公司的事情,把以前的一篇笔记先贴上来吧。

1、运行时出现 ORA 00600的错误问题:Oracle的驱动版本不匹配,可以是因为用了oracle 8i的驱动在oracle 9i上面。

2、Hibernate的POJO(普通Java 对象)在本地使用时是不需要实现Serializable接口的,除非需要远程传输时,才是必须的。

3、POJO必须实现一个无参数的构造函数,因为Hibernate使用了反射机制,其中调用了Constructor.newInstance()方法,这个方法会调用对应类的无参数构造函数。

4、Hibernate与应用服务器来比较,Hibernate只是实现持久化的一个解决方案,但是他解决了透明的持久化,无数据库无关,不用写JDBC,只需要配置文件将POJO与DB进行粘合,这种特性在一定程度上实现了Hibernate程序的可移植性(如果将来都支持Hibernate的话,业务模型就是完全可重用的了)。而应用服务器通过了Interceptor来实现cross-cutting,目的是让容器来解决部分“安全、并行、持久化”等关注点(Concerns)

5、Hibernate自己实现了Java的Collection Framework,因此在Hibernate中使用集合时,只能使用Java中的接口类,而不能使用抽象的或者具体的类实现,这样会出现冲突。

6、Hibernate比较两个对象是否相等是通过值来进行比较的,不过有有一个例外就是Collection中的对象相等是通过id来完成的。

7、Hibernate中的POJO与数据库的表结构不一定是一一对应的,比如在统计的应用环境中,有一些列是计算得到的,这样可以在POJO的配置文件中增加一个属性,但没有对应的Column属性,而是用formula属性来设定计算公式。

8、Hibernate可以通过配置文件来控制是否将某个属性出现在insert或者update的sql语句(insert into table(a, b,c ))中,也可以通过在class元素中配置dynamic-insert或者dynamic-update来设置自动判断。

9、如果在一些数据库中,引用其字段需要在字段名上加单引号,此时可以在hbm.xml文件中的property.column属性中用双引号包括单引号,比如"'column'"

10、命名转换。在hbm.xml中如果不指定class对应的Table,property对应的column时,如果不显式的指定对应的元素,默认的hibernate将采用与POJO的名称相同的名称,如果有其他特殊约定,比如表名以“CD”开头,可以写一个类,实现NamingStrategy,然后在程序中指定cfg.setNamingStrategy( new CENamingStrategy() );

11、在hbm.xml中,可以通过在hibernate-mapping元素中,总体声明一些公用的元素,比如package, default-scheme等。

12、两个对象比较的一些方式Object identity→两个对象是同一的,在内存中地址相同, Object equality→两个对象表示的值相同,Database identity→两个对象表述的是数据库中的同一个记录。

13、Hibernate中有component的概念,将同一个表中的部分字段取出来作为一个POJO,这就是一个Component。

14、Lifecycle接口中定义了一些回调的方法onSave, onUpdate, onDelete, onLoad,实现这些方法可以实现对象之间“关联”的手工维护。需要注意的是:onUpdate并不是每次更新时都调用,而是非持久化的短暂状态的对象在持久化时才会调用。

你可能感兴趣的:(Hibernate 学习笔记)