hibernate - 冲洗模式只能使用一次吗?

标签 hibernate spring spring-mvc

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

相关文章:

hibernate - 持久化设计的一般问题

java - chalice /hibernate : No row with the given identifier exists

java - DispatcherServlet - Roo 项目中的上下文初始化失败

java - 如何在模型和 View 方法中返回url?

java - 无 XML 的 Spring 3.1 未找到 HTTP 请求的映射

java - 在 Spring 3 MVC 中管理 session

java - 如何制定 Hibernate 标准以仅引入需要的字段

java - 初始 SessionFactory 创建失败 : org. hibernate.MappingException:无效配置

spring security 在类路径中找不到元数据文件

java - 即使使用正确的用户名/密码,Spring 2.5 登录也没有响应