ページの先頭行へ戻る
Interstage Business Application Server オープンJavaフレームワークユーザーズガイド Java EE 7編
FUJITSU Software

5.7.1 V12.1.0以前からの移行

keyPropertyプロパティの値の設定

データベース側で自動生成されたキーを取得する場合に自動生成されたキーが格納される列名を指定するためのプロパティkeyPropertyを指定必須に変更しました。

以下の条件に該当する場合はアプリケーションの修正をしてください。

条件

影響

修正方法

以下のすべての条件に該当する場合です。

  • データベース側で自動生成されたキーを取得する

  • 自動生成されたキーが格納される列名がidである

  • keyPropertyプロパティに値を設定していない

自動生成されたキーの取得に失敗します。

keyPropertyプロパティに“id”を設定してください。

JdbcTransactionクラスを継承したクラスの変数名の変更

MyBatisが提供するJdbcTransactionクラスで使用している変数名を変更しました。

以下の条件に該当する場合はアプリケーションの修正をしてください。

条件

影響

修正方法

以下のすべての条件に該当する場合です。

  • JdbcTransactionクラスを継承したクラスを作成している

  • 変数autoCommmitを使用している

以下の影響があります。

  • アプリケーション実行時:メッセージ“NoSuchFieldError: autoCommmit”が出力され実行が失敗します。

  • アプリケーションのビルド時:以下のいずれかのエラーメッセージが出力されビルドが失敗します。

    • “autoCommmitを変数に解決できません”

    • “シンボルを見つけられません”

JdbcTransactionクラスを継承したクラスで使用している変更前の変数名を変更後の変数名に修正してください

BaseTypeHandlerクラスを継承したクラスでのNULL値変換処理の追加

MyBatisが提供するBaseTypeHandlerクラスの処理を変更しました。

以下の条件に該当する場合はアプリケーションの修正をしてください。

条件

影響

修正方法

以下のすべての条件に該当する場合です。

  • BaseTypeHandlerクラスを継承したクラスを作成している

  • SQL文の結果がSQLのNULLの場合にBaseTypeHandlerクラスを継承したクラスの以下のメソッドの戻り値にnullを設定していない

    • getNullableResult(CallableStatement, int)

    • getNullableResult(ResultSet, int)

    • getNullableResult(ResultSet, String)

  • SQL文の結果をJavaのプリミティブ型と対応づけする

BaseTypeHandlerクラスの以下のメソッドの戻り値が変わります

  • getResult(ResultSet, String)

  • getResult(ResultSet, int)

  • getResult(CallableStatement, int)

変更前:

  • null

変更後:

  • SQL文の結果をboolean型と対応付けする場合はfalse

  • SQL文の結果をboolean型以外のプリミティブ型と対応付けする場合は0

SQL文の結果がSQLのNULLの場合は、条件に記載したBaseTypeHandlerクラスを継承したクラスのメソッドの戻り値をnullにするように修正してください。

アプリケーションの修正例を以下に示します。

修正前

...
public class CustomeIntegerTypeHandler extends BaseTypeHandler<String> {

...

    @Override
    public Integer getNullableResult(ResultSet rs, String columnName) throws SQLException {
        ...
        // SQLの結果がSQL NULLを判定せずに値を返す
        return rs.getInt(columnName); 
    }

    @Override
    public Integer getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        ...
        // SQLの結果がSQL NULLを判定せずに値を返す
        return rs.getInt(columnIndex);
    }

    @Override
    public Integer getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        ...
        // SQLの結果がSQL NULLを判定せずに値を返す
        return cs.getString(columnIndex);
    }

...

}

修正後

...
public class CustomeIntegerTypeHandler extends BaseTypeHandler<String> {

...

    @Override
    public Integer getNullableResult(ResultSet rs, String columnName) throws SQLException {
        ...
        int result = rs.getInt(columnName);
        // SQLの結果がSQL NULLかを判定し、SQL NULLの場合はnullを返し、SQL NULLではない場合は値を返す
        if ( result == 0 && rs.wasNull() ) {    
            return null;
        } else {
            return result;
        }
    }

    @Override
    public Integer getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        ...
        int result = rs.getInt(columnIndex);
        // SQLの結果がSQL NULLかを判定し、SQL NULLの場合はnullを返し、SQL NULLではない場合は値を返す
        if ( result == 0 && rs.wasNull() ) {
            return null;
        } else {
            return result;
        }
    }

    @Override
    public Integer getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        ...
        int result = cs.getInt(columnIndex);
        // SQLの結果がSQL NULLかを判定し、SQL NULLの場合はnullを返し、SQL NULLではない場合は値を返す
        if ( result == 0 && cs.wasNull() ) {
            return null;
        } else {
            return result;
        }
    }

...

}