簡短的問題之下的長話短說:我怎樣才能讓Spring的NamedParameterJDBCTemplate加入Hibernate的會話? 我們有一個使用Spring和Hibernate的應用程序,我們的整個數據層都是Hibernate。但是現在有一個用例,我們有一個父對象,整個hibernate邏輯就位。父對象有許多(> 4000)細節,我們希望使用Spring的jdbctemplate插入所有細節,所有這些細節都在一個事務中(而不是使用hibernate)。父對象被保存,Parent的id(它是一個oracle序列)被設置,並且可以通過對象讀取。我們只需要承諾永久存儲它。 事務邊界在一個方法上設置,該方法還會觸發4000+ jdbctemplate插入的細節。 細節,作爲細節,確實需要對父對象的引用,這是父對象的ID,在執行4000+插入時可用。然而在第一個明細的插入,我得到一個Spring的NamedParameterJDBCTemplate加入Hibernate的會話?
integrity constraint (FK_008) violated - parent key not found
我想我明白,作爲JdbcTemplate的可能是使用另一個會話,併爲此另一個事務。我嘗試設置一個propegation:在執行4000+插入的方法上需要的事務屬性,期望事務的連接足以能夠讀取新的未提交的父ID,但這顯然是不夠的。 我希望我能以某種方式將hibernate會話連接到spring的jdbctemplate,但到目前爲止我還沒有做到。 SpringJDBC將dataSource作爲參數,jtatransaction管理器接受Hibernate SessionFactory,到目前爲止,我感覺東部是東部和西部,而不是兩個會合。還有其他的方法,讓Spring的jdbctemplate參與Hibernate的Session嗎? (除了提交父對象的insert之外,父對象可用於jdbctemplate)。
HibernateSessionFactory是org.springframework.orm.hibernate3.LocalSessionFactoryBean 與數據源作爲參數之一。
TransactionManager是獲取sessionFactory作爲參數的org.springframework.orm.hibernate3.HibernateTransactionManager。
的是NamedParameterJdbcTemplate在sqlInserter的二傳手創建:
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
希望有人能幫助我在這裏。
乾杯, 吉榮
問題是客戶對象不可用,所有數據都在哈希列表中。構建它的對象是我認爲的cpu循環的腰部。 – 2011-04-19 10:02:20