在我的applicationContext中,我有2个dao。如果我在下面指定我的第二个dao使用flushmode,我将收到错误无效;嵌套异常是org.xml.sax.SAXParseException:类型ID的属性值“org.springframework.orm.hibernate3.HibernateAccessor.FLUSH_COMMIT”在文档中必须是唯一的。另一方面,当我排除第2道的flushmode时,没有错误。任何人都可以解释一下吗?
<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>
答案 0 :(得分:1)
只需从flushMode属性中删除id属性。
<property name="flushMode">
<bean class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/>
</property>
建议:您不能在多个元素中使用相同的id属性。
的问候,
答案 1 :(得分:1)
通过提供适当的常量作为字符串值来配置刷新模式要容易得多:
<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可以省略。