今天再做一个项目的时候遇到了一个问题,再一个程序里边使用到了两种持久化的框架,分别是JdbcTemplate和Hibernate。为什么会使用两种持久化框架呢?是因为Hibernate是一种面向对象的SQL持久化框架,所以在进行SQL操作的时候回产生一些细粒度的问题,如我们在Java程序中调用数据库中的存储过程时就会产生问题,所以我们要使用比较原声的JdbcTemplate技术来为完善。但是在使用的过程中又遇到了一个问题,当两个持久化技术在同一个事务当中被用到的时候,应该怎样在Spring的IOC容器中使用对应的事务管理器呢?
我们知道,Hibernate是比较高级的语言,它封装了JDBC的内容。它当中由回话工厂产生回话,通过回话来操作数据库。Spring也是对Java程序的封装,它封装的JDBC原声的事务管理器DatasourceTransactionManager当中咩有SqlSessionFactory的特性,即没有高级特性,所以他无法使用。所以我们要使用Hibernate的事务管理器而不可用JdbcTemplate的事务管理器来同意管理两种持久化技术。
即:高级的可以管理低级的技术,低级的是无法管理高级的技术,因为高级的有很多新特性是低级技术不具备的。
我们这里所说的高级和低级,指的是封装和被封装的关系。如:Hibernate是对JDBC的封装。
通常来讲,Hibernate的事务管理器可以同时管理JdbcTemplate是需要满足一些条件的,二者的datasource必须一致。