sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2012 で Java Hibernate が機能しない?

    あなたの問題は、jTDS がデフォルトで DBCP2 が接続を検証する方法をサポートしていないことです (<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"> )。以下の解決策を参照してください。

    通常、エラー スタック トレースは次のようになります:

    Caused by: java.lang.AbstractMethodError
        at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
        at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:913)
    

    ただし、問題は SQL Server のバージョンではなく、使用されている DBCP (Tomcat) のバージョン (またはプロジェクトがデプロイされている Tomcat サーバーのバージョン) に関連しています。

    jTDS 1.3.1を使用していて、Tomcat7の下でプロジェクトが正常に機能しました(そしてSQLServer 2012にも接続されました)。 Tomcat 8 に変更したら、そのエラーが表示されました。

    jTDS フォーラムでほのめかされた 理由 、は:

    • (Tomcat7 は DBCP 1 を使用し、Tomcat 8 は DBCP 2 を使用します )
    • DBCP 1.x とは異なります 、DBCP 2 java.sql.Connection.isValid(int) を呼び出します 接続を検証する
    • jTDS は .isValid() を実装していません であるため、jTDS ドライバーは DBCP 2 では動作しません。ただし...
    • ...validationQuery を設定しない限り DBCP が .isValid() を呼び出さないようにするパラメーター 接続の有効性をテストします。

    回避策

    したがって、回避策は、validationQuery を設定することです パラメータ これにより、DBCP2 は .isValid() を呼び出さなくなります 接続の有効性をテストします。方法は次のとおりです:

    Tomcat の場合

    validationQuery="select 1" を追加 Tomcat <Resource> に 接続プールのタグ。通常は META-INF/context.xml にあります アプリまたは conf/server.xml の :

    <Resource ... validationQuery="select 1" />
    

    春に

    Spring で DBCP2 を使用する場合、解決策は次のとおりです。

    <bean id="..." ...> 
        ...
        <property name="validationQuery" value="select 1" />
    </bean>
    

    簡単な Java コードについて

    dataSource.setValidationQuery("select 1"); 
    


    1. テーブルから別のテーブルに2つのFKを結合するにはどうすればよいですか?

    2. 2つのSQLServerデータベースを比較するための無料のツールとは何ですか?

    3. 共通の属性を持つ連続したレコードのグループを選択しますか?

    4. データベースAPI:Pythonで複数のwhere条件を処理する方法