[Seasar-user:17809] [S2JDBC] where句の生成で、Parameter.timestamp は 文字列による生成専用(SimpleWhere では使えない)でしょうか?

O.K.U. [E-MAIL ADDRESS DELETED]
2009年 6月 21日 (日) 03:27:41 JST


久しぶり(3年ぶり?)に投稿いたします。
以前は S2JSF でよくお世話になりました、O.K.U.と申します。

今回は S2JDBC に関する質問です。
where句の自動生成で、java.util.Calendar 型のデータを扱う場合に
org.seasar.extension.jdbc.parameter.Parameter.timestamp(Calendar)で
ラップすると、SQL文字列による指定ではうまく動作しますが、
SimpleWhereによる指定 では ParseRuntimeException が発生します。
date(), time() も同様です。これら
org.seasar.extension.jdbc.parameter.Parameter.
パッケージは文字列によるSQL生成専用のクラスなのでしょうか?

SimpleWhereでは、DB の timestamp 型との比較は
単純に Calendar をそのまま,あるいは java.sql.Timestamp 型で
渡せばよいのでしょうか?

3年たっても、質問ばかりで申し訳ございませんが、
ご教授よろしくお願いいたします。

例)
import static org.seasar.extension.jdbc.parameter.Parameter.*;

public List<TestTbl> findByLastUpdate(Calendar lastTime) {
    return select().where(new SimpleWhere().le("lastUpdate", 
timestamp(lastTime))).getResultList();
}

rg.seasar.framework.exception.ParseRuntimeException: [ESSR0050]解析に失敗しました。理由はjava.text.ParseException: Unparseable date: 
"[E-MAIL ADDRESS DELETED]"
	at 
org.seasar.framework.util.DateConversionUtil.toDate(DateConversionUtil.java:97)
	at 
org.seasar.framework.util.DateConversionUtil.toDate(DateConversionUtil.java:80)
	at 
org.seasar.framework.util.DateConversionUtil.toDate(DateConversionUtil.java:68)
	at 
org.seasar.framework.util.TimestampConversionUtil.toTimestamp(TimestampConversionUtil.java:57)
	at 
org.seasar.framework.util.TimestampConversionUtil.toTimestamp(TimestampConversionUtil.java:43)
	at 
org.seasar.extension.jdbc.types.TimestampType.toTimestamp(TimestampType.java:88)
	at 
org.seasar.extension.jdbc.types.TimestampType.toText(TimestampType.java:95)
	at 
org.seasar.extension.jdbc.util.BindVariableUtil.getBindVariableText(BindVariableUtil.java:155)
	at 
org.seasar.extension.jdbc.util.BindVariableUtil.getCompleteSql(BindVariableUtil.java:103)
	at 
org.seasar.extension.jdbc.query.AbstractQuery.logSql(AbstractQuery.java:165)
	at 
org.seasar.extension.jdbc.query.AbstractSelect.getResultList(AbstractSelect.java:170)
	at test.service.TestTblService.findByLastUpdate(TestTblService.java:46)
【中略】
Caused by: java.text.ParseException: Unparseable date: 
"[E-MAIL ADDRESS DELETED]"
	at java.text.DateFormat.parse(DateFormat.java:337)
	at 
org.seasar.framework.util.DateConversionUtil.toDate(DateConversionUtil.java:95)


文字列による生成(↓)はOK

public List<TestTbl> findByLastUpdate2(Calendar lastTime) {
    return select().where("lastUpdate < ?", 
timestamp(lastTime)).getResultList();
}

 



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