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

解决方案 »

  1.   

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

  2.   

    1.
    那是不是有了HibernateTransactionManager就可以进行申明式事务管理了,而没有则就不行了?
    它不像HibernateTemplate 只是提供一个模版,还提供了事务传播的管理等?
    2.
    HibernateTemplate是让你在模版中间填写自己的代码
    HibernateTransactionManager是能通过AOP在你代码前后添加逻辑
    是吧?
    3.我觉得HibernateTemplate完全没什么用,没它不一样编程蛮方便吗?
    public void save(User user) {
                Session s = sessionFactory.getCurrentSession();
                s.save(user);
    }
    请问有了HibernateTemplate后它有什么方便是之前没有的呢?
      

  3.   

    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的。。
    晚上回家实验一下~
      

  4.   

    TransactionSynchronizationManager,这个
      

  5.   

    非常感谢你的回答哈。
    请问这段英文什么意思: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的操作呢?那唯独只能是事务管理器告诉它喽。
      

  6.   

    呵呵“TransactionSynchronizationManager,这个”,这个怎么了?
    还麻烦你看个问题:
    http://topic.csdn.net/u/20110701/18/7eef2a03-ae45-489a-a100-394b6e6be008.html
      

  7.   

    就是这样的 
    但是下面的HibernateTransactionManager 还真没用过
      

  8.   

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