[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 メーリングリストの案内