我有一个项目,我想利用 Hibernate 来提高基本操作的开发速度,结合 Spring 的 JDBC 模板能够使用我自己的 SQL 查询进行一些特定的操作,而不是松散控制,因为有一些繁重的、性能要求高的操作。
这甚至可能还是一个好主意?
我有一个项目,我想利用 Hibernate 来提高基本操作的开发速度,结合 Spring 的 JDBC 模板能够使用我自己的 SQL 查询进行一些特定的操作,而不是松散控制,因为有一些繁重的、性能要求高的操作。
这甚至可能还是一个好主意?
对的,这是可能的。是的,这是个好主意。
文档说:
对于跨多个 Hibernate 会话工厂的分布式事务,只需将 JtaTransactionManager 作为事务策略与多个 LocalSessionFactoryBean 定义相结合。然后,每个 DAO 都会获得一个特定的 SessionFactory 引用,并将其传递到其相应的 bean 属性中。如果所有底层 JDBC 数据源都是事务容器数据源,则业务服务可以在任意数量的 DAO 和任意数量的会话工厂之间划分事务,而无需特别注意,只要它使用 JtaTransactionManager 作为策略即可。
[...]
HibernateTransactionManager 可以将 Hibernate JDBC Connection 导出为纯 JDBC 访问代码,用于特定的 DataSource。如果您只访问一个数据库,则此功能允许使用完全没有 JTA 的混合 Hibernate 和 JDBC 数据访问进行高级事务划分。如果您通过 LocalSessionFactoryBean 类的 dataSource 属性设置传入的 SessionFactory 和 DataSource,HibernateTransactionManager 会自动将 Hibernate 事务公开为 JDBC 事务。或者,您可以通过 HibernateTransactionManager 类的 dataSource 属性显式指定应该为其公开事务的 DataSource。
因此,如果您在支持 JTA 事务和数据源的全栈 Java EE 容器中,请使用在 Java EE 容器中定义的数据源和 JTATransactionManager。
如果您在一个简单的 Web 容器(如 Tomcat)中,请使用 Spring 提供的 DataSource 和 HibernatTransactionManager。