[Seasar-user:15832] Re: S2Dao における entity クラスの配列プロパティ

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2008年 9月 24日 (水) 16:10:48 JST


中村(taedium)です。

> 単純なデータ型(int double String...)だとうまくいきますが、整数型配列型(つまり
> 配列型,int[],floa[]...)でフィールドを定義するとエラーとなります。

S2Daoでは配列型(java.sql.Array)をサポートしていません。
ただし、拡張するコードを書けば対応させることはできます。
(更新は試していませんが、取得はできることを確認しました。
更新するときはjava.sql.Arrayのインスタンスを取得するための
工夫が必要そう。)
以下、拡張方法を説明します。


まず、JDBCの配列型を扱うクラスを作成します。
org.seasar.extension.jdbc.types.AbstractValueTypeを継承して
作成します。一部省略していますが、次のようになります。

public class ArrayType extends AbstractValueType {
    public ArrayType() {
        super(Types.ARRAY);
    }
    ・・・(略)・・・
    public Object getValue(ResultSet resultSet, int index) 
            throws SQLException {
        Array array = resultSet.getArray(index);
        if (array == null) {
            return null;
        }
        return array.getArray();
    }

    public Object getValue(ResultSet resultSet, String columnName)
            throws SQLException {
        Array array = resultSet.getArray(columnName);
        if (array == null) {
            return null;
        }
        return array.getArray();
    }
}


次に、作成したクラスをdao.diconなどのdiconファイルに登録します。

  <component name="arrayType" class="examples.ArrayType"/>


最後に、BeanのクラスでVALUE_TYPE定数アノテーションを記述します。
定数名は、プロパティ名_VALUE_TYPEとし、
値には、diconファイルに登録したコンポーネント名を指定します。

public class GridDataRec{

    public static String pointValue_VALUE_TYPE = "arrayType";

    private int[] pointValue;
    ・・・(略)・・・
}
-- 
Nakamura Toshihiro <[E-MAIL ADDRESS DELETED]>



Seasar-user メーリングリストの案内