我们有一个具有以下 Spring bean 的 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'
实体是典型的领域对象,例如员工等。
当将构造函数的可见性修饰符更改为包(或公共)时,应用程序运行良好,实体被存储/加载到数据库中。我们/我们如何使用私有构造函数/静态工厂方法和 Spring/Hibernate 事务管理?
我们使用 Hibernate 注释来映射实体/关系。在 applicationContext.xml 中没有为与问题相关的域类声明任何 bean 定义。它是一个 pojo,应该有一个静态工厂方法和一个私有构造函数。
我们如何让 Hibernate(我猜是 org.springframework.spring-orm.hibernate3 类)使用静态工厂方法而不是构造函数?或者如果必要的话可能让它调用一个私有构造函数?
使用 spring factory-method 配置是有意义的,但实体没有映射为我们的 applicationContext.xml 中的 bean。它们仅使用 @Entity 注释进行注释以实现 Hibernate 持久性。
希望这个编辑能澄清(而不是神秘化)这个问题。:)