flushmode只能使用一次?

时间:2009-09-28 06:37:26

标签: hibernate spring spring-mvc

在我的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>

2 个答案:

答案 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可以省略。