下面是一个简短的问题:如何让 Spring 的 NamedParameterJDBCTemplate 加入 Hibernate 的会话?我们有一个使用 Spring 和 Hibernate 的应用程序,我们的整个数据层都使用 Hibernate。但是现在有一个用例,我们有一个父对象,整个休眠逻辑都已到位。父对象有许多(> 4000)细节,我们确实想使用 Spring 的 jdbctemplate 插入,所有这些都在一个事务中(而不是使用休眠)。父对象被保存,父对象的 id(它是一个 oracle 序列)被设置,并且可以通过对象读取。我们只需要提交才能永久存储它。事务边界设置在一个方法上,该方法也会触发 4000 多个 jdbctemplate 插入细节。细节,即细节,确实需要对父对象的引用,即父对象的 id,在执行 4000 多个插入时可用。但是在插入第一个细节时,我得到了一个
integrity constraint (FK_008) violated - parent key not found
我想我明白这一点,因为 jdbctemplate 可能正在使用另一个会话,因此是另一个事务。我尝试在执行 4000+ 次插入的方法上设置 propegation:required 事务属性,期望事务的加入足以读取新的未提交父 ID,但这显然还不够。我希望我能以某种方式将休眠会话连接到 spring 的 jdbctemplate 但到目前为止我还不能这样做。SpringJDBC 以dataSource 作为参数,jtatransaction manager 以Hibernate SessionFactory 为参数,到目前为止,我觉得东西方是东西方,永远不会相遇。还有其他方法可以让 Spring 的 jdbctemplate 参与 Hibernate 的 Session 吗?(除了追求父母的承诺'
HibernateSessionFactory是一个 org.springframework.orm.hibernate3.LocalSessionFactoryBean ,其 dataSource 作为参数之一。
TransactionManager是 org.springframework.orm.hibernate3.HibernateTransactionManager 获取 sessionFactory 作为参数。
NamedParameterJDBCTemplate在sqlInserter的 setter 中创建:
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
希望有人可以在这里帮助我。
干杯,杰伦