[Seasar-user:15817] S2Dao における entity クラスの配列プロパティ
やぎ
[E-MAIL ADDRESS DELETED]
2008年 9月 24日 (水) 09:27:07 JST
Seasar-userメーリングリストの皆さま
はじめまして、やぎと申します。
今までJDBCだけでRDB接続処理を組んでいました。
S2Daoではインターフェイスだけ決めれば、実装はコンテナがやってくれるということ
に魅力を感じています。
単純なデータ型(int double String...)だとうまくいきますが、整数型配列型(つまり
配列型,int[],floa[]...)でフィールドを定義するとエラーとなります。
---
[ESSR0059]クラス(rdb.api.entity.GridDataRec)のプロパティ(pointIndex)の設定に失
敗しました。理由はjava.lang.IllegalArgumentException: argument type mismatch
---
過去ログも参照しましたが未だ解決していません。
どなたか、ご助言いただけると助かります。
-------------------------------------------------
使用ライブラリ
postgresql-8.3-603.jdbc4.jar
s2-dao-1.0.48.jar
s2-extension-2.3.23.jar
s2-framework-2.3.23.jar
...
-------------------------------------------------
Daoインターフェイス
package rdb.api.dao;
import rdb.api.entity.GridRec;
public interface IGridDataDao{
public static final Class BEAN = GridDataRec.class;
public String getByAreaCode_ARGS = "areaCode";
public List getByAreaCode(int areaCode);
}
-------------------------------------------------
Entityクラス
package rdb.api.entity;
public class GridDataRec{
public static final String TABLE = "grid_data";
private int recordId;
private Timestamp recordTimestamp;
private int areaCode;
private int[] pointValue;
public int getRecordId(){return recordId;}
public Timestamp getRecordTimestamp(){return recordTimestamp;}
public int getAreaCode(){return areaCode;}
public int[] getPointValue(){return pointValue;}
public void setRecordId(int value){recordId = value;}
public void setRecordTimestamp(Timestamp value){recordTimestamp = value;}
public void setAreaCode(int value){areaCode = value;}
public void setPointValue(int[] value){pointValue = value;}
}
-------------------------------------------------
diconファイル
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" "http://www.seasa
r.org/dtd/components.dtd">
<components>
<include path="dao.dicon"/>
<component class="rdb.api.dao.IGridDataDao">
<aspect>dao.interceptor</aspect>
</component>
</components>
-------------------------------------------------
テーブル定義
create table grid_data(
record_id numeric(10) primary key,
record_timestamp timestamp(3),
area_code numeric(10),
point_value numeric(12,4)[10]
);
-------------------------------------------------
SQLファイル(IGridDataDao_getAreaCode_postgre.sql)
select * from grid_data where area_code = /*areaCode*/'1000'
-------------------------------------------------
RDB格納データ
record_id,record_timestamp,area_code,point_value
1,'2008-09-16 01:12:00',1000,'{0,1,2,3,4,5,6,7,8,9}'
2,'2008-09-16 01:12:01',2000,'{10,11,12,13,14,15,16,17,18,19}'
3,'2008-09-16 01:12:02',2000,'{20,21,22,23,24,25,26,27,28,29}'
-------------------------------------------------
試験クラス
package rdb.api.dao;
import java.sql.Timestamp;
import java.util.Iterator;
import java.util.List;
import org.seasar.dao.unit.S2DaoTestCase;
public class IGridDataDaoTest extends S2DaoTestCase{
private final String PATH = "rdb/api/dao/IGridDataDao.dicon";
private IGridDataDao dao;
protected void setUp() throws Exception{
super.setUp();
include(PATH);
}
/** 地域番号による検索 */
public void testGetByAreaCode() throws Exception{
int areaCode = 1000;
List list = dao.getByAreaCode(aeaCode);
for(Iterator it=list.iterator(); it.hasNext();){
GridDataRec rec = (GridDataRec)it.next();
StringBuffer sb = new StringBuffer();
sb.append(rec.getRecordId()+",");
sb.append(rec.getRecordTimestamp()+",");
sb.append(rec.getAreaCode()+",");
sb.append("size:"+rec.getPointValue().length);
System.out.println(sb.toString());
}
}
}
-------------------------------------------------
例外メッセージ
Test set: rdb.api.dao.IGridDataDaoTest
------------------------------------------------------------------------------
-
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.297 sec <<<
FAILURE!
testGetByAreaCode(rdb.api.dao.IGridAreaDaoTest) Time elapsed: 1.125 sec <<<
ERROR!
org.seasar.framework.beans.IllegalPropertyRuntimeException: [ESSR0059]クラス(r
db.api.entity.GridDataRec)のプロパティ(pointIndex)の設定に失敗しました。理由は
java.lang.IllegalArgumentException: argument type mismatch
at org.seasar.framework.beans.impl.PropertyDescImpl.setValue(PropertyDescImpl
.java:125)
at org.seasar.dao.impl.RowCreatorImpl.registerValue(RowCreatorImpl.java:76)
at org.seasar.dao.impl.RowCreatorImpl.createRow(RowCreatorImpl.java:62)
Seasar-user メーリングリストの案内