HibernateAccessor

HibernateAccessor是HibernateInterceptor和HibernateTemplate父类,它主要提供Hibernate刷新机制的转换和Hibernate异常体系到Spring异常体系的转换

刷新机制
Spring定义刷新选项
FLUSH_NEVER
FLUSH_AUTO
FLUSH_EAGER
FLUSH_COMMIT
FLUSH_ALWAYS
Hibernate定义刷新选项
MANUAL(Flush_NEVER过时)
COMMIT
AUTO
ALWAYS
在Spring代理Hibernate操作之前,必须根据内置的刷新机制合理的改变Hibernate刷新机制,同时对于每个选项,根据Session是否绑定等情况,有不同的处理.当操作完成之后可回复。
FLUSH_NEVER
已绑定:改变Hibernate FlushMode 为 MANUAL
未绑定:改变Hibernate FlushMode 为 MANUAL
FLUSH_AUTO
已绑定:保留操作之前的Hibernate FlushMode
未绑定:Hibernate FlushMode默认为 AUTO
FLUSH_EAGER
已绑定:改变Hibernate FlushMode 为 AUTO
未绑定:Hibernate FlushMode默认为 AUTO
FLUSH_COMMIT
已绑定:如果之前FlushMode不为Manual,改变Hibernate FlushMode 为 COMMIT
未绑定:改变Hibernate FlushMode 为 COMMIT
FLUSH_ALWAYS
已绑定:改变Hibernate FlushMode 为 ALWAYS
未绑定:改变Hibernate FlushMode 为 ALWAYS
在Hibernate操作成功之后,以下两种情况可刷新
HibernateAccessor的flushMode设置为FLUSH_EAGER(HibernateInterceptor和HibernateTemplate支持)
使用非线程绑定的Session操作并且flushMode不是FLUSH_NEVER

/**
* Apply the flush mode that's been specified for this accessor
* to the given Session.
* @param session the current Hibernate Session
* @param existingTransaction if executing within an existing transaction
* @return the previous flush mode to restore after the operation,
* or {@code null} if none
* @see #setFlushMode
* @see org.hibernate.Session#setFlushMode
*/
protected FlushMode applyFlushMode(Session session, boolean existingTransaction) {
if (getFlushMode() == FLUSH_NEVER) {
if (existingTransaction) {
FlushMode previousFlushMode = session.getFlushMode();
if (!previousFlushMode.lessThan(FlushMode.COMMIT)) {
session.setFlushMode(FlushMode.MANUAL);
return previousFlushMode;
}
}
else {
session.setFlushMode(FlushMode.MANUAL);
}
}
else if (getFlushMode() == FLUSH_EAGER) {
if (existingTransaction) {
FlushMode previousFlushMode = session.getFlushMode();
if (!previousFlushMode.equals(FlushMode.AUTO)) {
session.setFlushMode(FlushMode.AUTO);
return previousFlushMode;
}
}
else {
// rely on default FlushMode.AUTO
}
}
else if (getFlushMode() == FLUSH_COMMIT) {
if (existingTransaction) {
FlushMode previousFlushMode = session.getFlushMode();
if (previousFlushMode.equals(FlushMode.AUTO) || previousFlushMode.equals(FlushMode.ALWAYS)) {
session.setFlushMode(FlushMode.COMMIT);
return previousFlushMode;
}
}
else {
session.setFlushMode(FlushMode.COMMIT);
}
}
else if (getFlushMode() == FLUSH_ALWAYS) {
if (existingTransaction) {
FlushMode previousFlushMode = session.getFlushMode();
if (!previousFlushMode.equals(FlushMode.ALWAYS)) {
session.setFlushMode(FlushMode.ALWAYS);
return previousFlushMode;
}
}
else {
session.setFlushMode(FlushMode.ALWAYS);
}
}
return null;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值