我们必须具有以下的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