在我的 applicationContext 中,我有 2 个 dao 。如果我将下面的第二个 dao 指定为使用刷新模式,我将收到错误 invalid;嵌套异常是 org.xml.sax.SAXParseException:类型 ID 的属性值“org.springframework.orm.hibernate3.HibernateAccessor.FLUSH_COMMIT”在文档中必须是唯一的。另一方面,当我排除第二个 dao 的刷新模式时,没有错误。谁能解释一下吗?
<bean id="dao" class="info.jtrac.hibernate.HibernateJtracDao" init-method="createSchema">
<property name="hibernateTemplate">
<bean class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="flushMode">
<bean id="org.springframework.orm.hibernate3.HibernateAccessor.FLUSH_COMMIT"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/>
</property>
</bean>
</property>
</bean>
<bean id="secondsdao" class="com.company.secondSHibernateDao" >
<property name="hibernateTemplate">
<bean class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="secondSsessionFactory"/>
<property name="flushMode">
<bean id="org.springframework.orm.hibernate3.HibernateAccessor.FLUSH_COMMIT"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/>
</property>
</bean>
</property>
</bean>
最佳答案
通过提供适当的常量作为字符串值来配置刷新模式要容易得多:
<bean class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="secondSsessionFactory"/>
<property name="flushModeName" value="FLUSH_COMMIT" />
</bean>
但是,如果您想从 HibernateAccessor 中定义的常量检索该值,则需要配置 FieldRetrievingFactoryBean
通过将要检索的字段名称正确指定为 staticField
属性:
<bean class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="secondSsessionFactory"/>
<property name="flushMode">
<bean class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<property name="staticField" value="org.springframework.orm.hibernate3.HibernateAccessor.FLUSH_COMMIT"/>
</bean>
</property>
</bean>
Bean id 是完全不同的东西;它用于唯一标识应用程序上下文中的 bean,并且正如 Arthur 指出的那样,对于内部 bean 可以省略。
关于hibernate - 冲洗模式只能使用一次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1485706/