Hibernate 经典方案
时间:2010-10-12 来源:菊次郎
- 每个类都要有一个ID来区分对象的
- <property name="current_session_context_class">thread</property>这个配置将当前的Session绑定到当前的thread上, 但是, 还要考虑Session的开始和结束, 第一次的getCurrentSession就开始了, 然后被绑定到当前的线程. 当事务结束, Hibernate就把这个Session从当前thread上剥离掉. 这就是一种线程绑定模型
- 记住: 不要每一次数据库操作都用一个新的Hibernate Session. 每一次操作一个Session都是一个反模式.
- <property name="show_sql">true</property>配置了是否显示sql. 这是一个经典的参数开关
- <property name="hbm2ddl.auto">create</property> 配置了一个单元测试会用到的场景. Create的含义是在创建SessionFactory的时候, 从schema中drop掉所有的表, 然后再创建它们.
- 再做Hibernate的设计的时候, 要考虑到关联的方向性, 有的不必要的方向, 应该去掉这样的方向性.
-
关于对持久化对象的修改, 会自动回刷到数据库的原理:
Hibernate监视任何对持久化对象(绑定在Session上的对象)的变化, 并在后台上使用隐式的方式执行sql. 而同步内存状态和数据库状态的过程, 通常只在单元操作结束的时候发生, 这叫做Flush
-
Session-per-request模式:
在每个sevlet中只使用一个session, 代码结构:
Try{
Session.beginTransaction();
// .. 业务逻辑
Session.getTransaction().commit();
}Catch(Exception ex){
Session.getTransaction().rollback();
}
这样会把事务的边界处理都放到了servlet中了, 可以使用一个过滤器来完成, 这样就又引入了一个模式: Open Session in View
相关阅读 更多 +