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