我們必須具有以下的Spring bean一個Hibernate/Spring應用程序:Hibernate和Spring交易 - 使用私有構造/靜態工廠方法
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" />
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" />
當一起佈線應用程序,我們使用私有的構造時,遇到下列錯誤在我們的休眠實體中:
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No visible constructors in class 'ourclass'
實體是典型的域對象,如Employee或類似的。
當將構造函數的可見性修飾符更改爲包(或公共)時,應用程序運行良好,實體被存儲/加載到數據庫中。我們/我們可以在Spring/Hibernate事務管理中使用私有構造函數/靜態工廠方法嗎?
我們使用Hibernate註釋來映射實體/關係。 applicationContext.xml中沒有爲與問題相關的域類聲明bean定義。這是一個應該有一個靜態工廠方法和一個私有構造函數的pojo。
我們如何使Hibernate(org.springframework.spring-orm.hibernate3類,我猜)使用靜態工廠方法而不是構造函數?或者如果需要,可能會調用一個私有構造函數?
使用spring工廠方法配置是有道理的,但實體在applicationContext.xml中沒有映射爲bean。它們只用Hibernate持久性的@Entity註釋進行註釋。
希望這個編輯能夠澄清(而不是神祕)這個問題。 :)
你能否詳細說明一下如何做到這一點,以便Hibernate事務管理器使用工廠方法?事務管理器拋出異常。我們使用Hibernate註釋來映射實體/關係。 – 2008-12-03 10:17:07
你可以發佈你的配置文件,以及類的相關部分嗎? – BraveSirFoobar 2008-12-03 13:11:18
在實例化Spring bean時使用了factory-method。在這種情況下,看起來問題在於Hibernate bean的實例化。 – Guillaume 2008-12-10 11:33:35