0

彼らは、ajaxを使用したhibernateとwebappのクローズドセッションはJavaとSpringの一般的な問題であると言っているので、このようにweb.xmlでOpenSessionInViewInFilterを設定する必要があります

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>    
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext.xml
    </param-value>
</context-param>
<filter>
    <filter-name>springFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>springFilter</filter-name>
    <url-pattern>/dwr/*</url-pattern>
</filter-mapping>

しかし、それでも、Hibernate Criteria api を使用しようとすると、「Session is Closed」という休止状態の例外が発生するため、OpenSessioninViewInterceptor を使用して別の春の方法を試しました。

<bean id="urlMapping"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="alwaysUseFullPath" value="false"/>
     <property name="mappings">
            <props>
                <prop key="*">dwrController</prop>
            </props>
    </property>
    <property name="interceptors">

そしてインターセプター

<bean id="openSessionInViewInterceptor"class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">

同じ「セッションが閉じられている」問題。ここで私を助けてください。私はJavaが初めてなので、あなたの助けに感謝します。

現在、maven の jetty プラグイン、バージョン 6.1.10 内で実行しています。

4

2 に答える 2

0

それを見つけた。サービス クラスで @Transactional を宣言する必要があります。

于 2009-11-27T10:21:07.673 に答える
0

異なるスレッド間でデータを渡さないようにしてください。遅延読み込みを使用している場合、これは特に簡単です (休止状態のマッピングのデフォルトを確認してください)。

エンティティ Y が遅延ロードされ、(Hibernate を介して) エンティティ X から参照され、あるスレッドから別のスレッドに X を渡し、この別のスレッドで x.getY() を実行すると、問題が発生します。

于 2009-11-27T10:01:50.797 に答える