Hibernate 备忘知识点
来源:互联网 发布:好听的网络名字女生 编辑:程序博客网 时间:2024/05/15 01:20
转自:《JAVA EE 实用开发指南(基于Weblogic+EJB3+Struts2+Hibernate+Spring)》 作者:高洪岩
1)不可手动修改OID,因为将造成缓存中的数据不准确。
2)Session接口中的update方法是将一个游离对象转变成持久对象的方案。
3)对于Session接口中的saveOrUpdate()方法,如果参数传入的是瞬时对象就执行save,如果传入的是游离对象,就执行update。
4)Session接口中的load和get方法都具有查询数据的功能。区别是,当数据库中不存在指定的OID数据时,load方法报异常,而get方法返回空,get方法在主从表关系上取得从表的数据永远立即检索数据库。load方法在主从表关系上取得从表的数据永远返回代理类。
5)执行完一个save操作之后,最好使用session.flush()方法进行缓存与数据库的同步。经常出现的问题就是新建一条记录,然后立即执行list.action时找不到刚才的记录,主要原因就是缓存的数据没有和数据库的同步。如果在执行save操作之后根本不需要访问再访问这个对象,也就没有必要执行flush()方法。
6)Hibernate3.1默认是延迟加载,延迟加载(lazy)的意义主要体现在主从表上,如主贴与回帖。当使用延迟加载时,在根据一个主贴OID取得主贴信息时,并不会自动取得与这个主贴相关联的回帖。延迟加载的反方法为立即加载,如果使用立即加载,那么根据一个OID取得主贴的同事会把数据库中回帖的数据记录也异同查询出来,这样就损失性能,所以要根据实际情况和数据量的大小来设置lazy的值是TRUE或FALSE。可以在set一端进行lazy的设置,如配置文件。
7)如果正在使用延迟加载,并且在action中已经将session.close()关闭,那么JSP中取得List中的子表数据会提示出错:Exception sinitializing proxy-Could not initialize proxy -the owning Session was closed。解决办法是哎session.close之后,将List中的对象使用方法Hibernate.initialize(代理对象参数)对List中的代理类进行实例化。或者使用Open Session In View的设计模式 来达到目的。Hibernate 中代理类的概念即只有一个OID属性的类,所以使用延迟加载时,List中的字表数据都是代理类,在List中取得时就会出错,所以要使用Hibernate.initialize(代理对象参数)方法进行代理类的实例化,最后需要注意的是导入类import org.hibernate.Hibernate。
8)延迟加载只对load方法有效,对get方法是无效的,因此get方法永远不会生成映射类的代理。
9)对于多对一或一对一关联,应该优先采用外连接检索策略,这样比立即检索策略使用的SQL语句更少。
10)使用Hibernate的ORM技术需要根据实际情况,对于超大数据量的软件项目,不要为了Hibernate而Hibernate。
- Hibernate 备忘知识点
- 知识点备忘
- 知识点备忘
- Hibernate备忘
- 小知识点备忘
- Android 知识点备忘
- 常用小知识点备忘
- 个人备忘知识点
- java备忘知识点
- c#备忘知识点
- javascript知识点备忘
- 【Android】基础知识点备忘
- Python 精巧知识点备忘
- shell 知识点备忘
- Android 知识点备忘
- C++ 知识点备忘
- postcss 知识点备忘
- vim 中知识点备忘
- 优秀的开源项目已经提供SVN地址
- boost智能指针
- #define用法
- Windows Phone 7 开发——独立存储
- Linux源码安装过程中选项prefix
- Hibernate 备忘知识点
- QNX Photon Gui and Multiple Threads
- 9.1 Ext文件系统族简介
- Makefile+GDB
- 使用 HttpWebRequest 向网站提交数据
- set::max_size
- spring学习(1)
- C++设计模式
- ubuntu设置开机默认进入字符界面方法