[Seasar-user:3747] [S2Dao] PostgreSQL INTERVAL型

田中 靖宏 [E-MAIL ADDRESS DELETED]
2006年 6月 4日 (日) 01:18:19 JST


田中久太郎です。

S2Daoを利用して PostgreSQLのInterval型の列にアクセスしたいのですが、テス
ト(FooDaoTest)に失敗して、以下のエラーが出ます。

org.seasar.framework.exception.SQLRuntimeException: [ESSR0071]SQLで例外
が発生しました。理由はorg.postgresql.util.PSQLException: ERROR: column
"value" is of type interval but expression is of type character varying

S2Daoで、PostgreSQLのInterval型の列を扱うにはどのようにすれば良いでしょ
うか?
良い方法をご存知の方はご教示ください。

ソースは以下に載せておきます。

PostgreSQL

■ INTERVAL型の列を持つテーブル
CREATE TABLE foo
(id INTEGER
,value INTERVAL
,CONSTRAINT foo_pkey PRIMARY KEY (id)
);

■ Foo.java (DTO)
package model;

public class Foo {
	
	public static final String TABLE = "foo";
	
	private int id;
	private String value;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
}

■ FooDao.java (DAO)
package dao;

import model.Foo;

public interface FooDao {
	public static final Class BEAN = Foo.class;
	
	public static final String findFoo_QUERY = "id = /*tid*/1";
	public static final String findFoo_ARGS = "tid";
	
	public void insert(Foo Foo);
	public int update(Foo Foo);
	public int delete(Foo Foo);
	
	public Foo findFoo(int tid);
}

■ FooDaoTest.java (テストプログラム)
package dao;

import model.Foo;
import org.seasar.dao.unit.S2DaoTestCase;

public class FooDaoTest extends S2DaoTestCase {
	FooDao dao;
	
	public FooDaoTest(String name) {
		super(name);
	}
	protected void setUp() throws Exception {
		super.setUp();
		include("foo.dao.dicon");
	}
	
	public void testInsert() {
		Foo foo = new Foo();
		foo.setId(1);
		foo.setValue("12:15:00");
		
		dao.insert(foo);
		
		Foo selectFoo = dao.findFoo(1);
		System.out.println(selectFoo.getId());
		System.out.println(selectFoo.getValue());
		
		dao.delete(foo);
	}
}


■ foo.dao.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
	"http://www.seasar.org/dtd/components23.dtd">
<components>
	<include path="dao.dicon" />
	<component name="FooDao" class="dao.FooDao">	
		<aspect>interceptor</aspect>
	</component>
</components>

■ FooDaoTest実行時のエラー
org.seasar.framework.exception.SQLRuntimeException: [ESSR0071]SQLで例外
が発生しました。理由はorg.postgresql.util.PSQLException: ERROR: column
"value" is of type interval but expression is of type character varying



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