您的位置:首页 > 其它

HibernateTransactionManager与HibernateTemplater是什么关系,其中一个是否多余?

2015-10-16 10:48 1096 查看


HibernateTransactionManager与HibernateTemplater是什么关系,其中一个是否多余? [问题点数:40分,结帖人CS_DN_HU]

不显示删除回复 显示所有回复
显示星级回复 显示得分回复
只显示楼主

收藏






CS_DN_HU
CS_DN_HU
本版等级:


结帖率:91.67%

楼主发表于: 2011-06-30 22:17:06

两者不都是为了使编程方便吗?

更多0分享到:

相关主题推荐:

相关推荐:

MDCC:10月14日见 错过等一年!

对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
回复次数:10




to_tq29
绿素潭竹
本版等级:


#1 得分:10回复于: 2011-06-30 22:32:20

HibernateTemplate 与 HibernateTransactionManager 是不同的,HibernateTemplate 是一个模板,是为了与数据库提供方便用的,HibernateTransactionManager 是一个事务管理器,它们所实现的方法也是不同的
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理





userguanguan
livesguan
本版等级:


#2 得分:5回复于: 2011-06-30 23:32:38

简单的说,就是为编程方便.其实看看他们的源码,自己也可以搞一套,两者的功能当然不同了,就像楼上所说的.具体可以去查查相关的文档.
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理





CS_DN_HU
CS_DN_HU
本版等级:


#3 得分:0回复于: 2011-07-01 08:12:09

1.

那是不是有了HibernateTransactionManager就可以进行申明式事务管理了,而没有则就不行了?

它不像HibernateTemplate 只是提供一个模版,还提供了事务传播的管理等?

2.

HibernateTemplate是让你在模版中间填写自己的代码

HibernateTransactionManager是能通过AOP在你代码前后添加逻辑

是吧?

3.我觉得HibernateTemplate完全没什么用,没它不一样编程蛮方便吗?

public void save(User user) {

Session s = sessionFactory.getCurrentSession();

s.save(user);

}

请问有了HibernateTemplate后它有什么方便是之前没有的呢?
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理





scare111
scare111
本版等级:


#4 得分:22回复于: 2011-07-01 15:28:43

HibernateTransactionManager

管理事务嵌套,开启,关闭,资源线程同步,提交,回滚

HibernateTemplate是可以感知到线程内的事务和资源(存放在RESOURCESYCHRONIZEDMANAGER貌似叫这个,由AbstractPlatformTransactionManager)



Session s = sessionFactory.getCurrentSession();



我在SPRING的论坛上也问了类似的问题。。专业人士的意思大概是sessionFactory.getCurrentSession()无法感知到SPRING开启的事务和资源(SESSION)。。

下面是API的描述:

Note that HibernateTemplate will perform its own Session management, not participating in a custom Hibernate CurrentSessionContext unless you explicitly switch "allowCreate" to "false".

下面这句话的意思也是。。类似。

对于这个我也有一些不解的地方,不过暂时我一直还是用这个TEMPLATE的。。

晚上回家实验一下~
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理





scare111
scare111
本版等级:


#5 得分:1回复于: 2011-07-01 15:40:05

TransactionSynchronizationManager,这个
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理





CS_DN_HU
CS_DN_HU
本版等级:


#6 得分:0回复于: 2011-07-01 18:36:58

引用 5 楼 scare111 的回复:

TransactionSynchronizationManager,这个

非常感谢你的回答哈。

请问这段英文什么意思:Note that HibernateTemplate will perform its own Session management, not participating in a custom Hibernate CurrentSessionContext unless you explicitly switch "allowCreate" to "false".

还有,“HibernateTemplate是可以感知到线程内的事务和资源”这句话怎么说?

是说这样吗:

1.如果事务管理器已经得到一个session了,hibernateTemplate就直接用这个session,没有则打开新的?

2.如果事务管理器已经session.beginTransaction()了,hibernateTemplate就不再次打开事务了?

3.如果事务管理器已经对事务有session.getTransaction().commit()了,hibernateTemplate就不再次提交了?

4.如果事务管理器已经在最后session.close()了,hibernateTemplate就不再关闭了?

5.对于1,2两个的感知好处理,但对于3,4呢,怎么感知?它怎么知道这个事务管理器有没有帮它做提交事务及关闭session的操作呢?那唯独只能是事务管理器告诉它喽。
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理





CS_DN_HU
CS_DN_HU
本版等级:


#7 得分:0回复于: 2011-07-01 18:38:17

引用 5 楼 scare111 的回复:

TransactionSynchronizationManager,这个

呵呵“TransactionSynchronizationManager,这个”,这个怎么了?

还麻烦你看个问题:

http://topic.csdn.net/u/20110701/18/7eef2a03-ae45-489a-a100-394b6e6be008.html
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理





hepeng154833488
hepeng_8
本版等级:


#8 得分:1回复于: 2011-07-02 00:10:14

引用 1 楼 to_tq29 的回复:

HibernateTemplate 与 HibernateTransactionManager 是不同的,HibernateTemplate 是一个模板,是为了与数据库提供方便用的,HibernateTransactionManager 是一个事务管理器,它们所实现的方法也是不同的

就是这样的

但是下面的HibernateTransactionManager 还真没用过
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理





CS_DN_HU
CS_DN_HU
本版等级:


#9 得分:0回复于: 2011-07-02 08:19:17

引用 8 楼 hepeng154833488 的回复:

所谓模版就是它给我们在前面后面加了,得到session,打开事务,提交事务,关闭session,try/catch回滚啊。但这些事务管理器不是已经做过了吗?这样不会有重复?
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: