2011-11-18 7 views
6

で動作します。ここには働いていない理由を把握するために私に多くの時間を取ったコードの最小バージョンです:setTimestampとHibernateExceptionでなく、setParameterを使用

Query q = session.createQuery(queryString); 
q.setTimestamp(0, new java.util.Date()); 

 

がエラーした

Unset positional parameter at position: 0 

 

私はsetParameter()setTimestamp()を交換した場合:

Query q = session.createQuery(queryString); 
q.setParameter(0, new java.util.Date()); 

 

そして、それは働いたが、私は理由を理解することはできません。私は休止状態3.2.1を使用しています。

編集:他の提案の投稿はどこに行きましたか?これはそれだった!あなたのマッピングで

+0

クエリ文字列はどのように見えますか? – Casey

+0

これは、アプリケーションのsから "?"(HQL)の間のs.validUntilです。どちらも 'cal.getTime()'を使った 'Calendar'オブジェクトからのものでしたが、シンプルに保つために、裸の' Date'オブジェクトを1つだけ追加しました。エラーは同じ方法のままです。 – Raidok

答えて

1

ここではjava.util.Dateの代わりにjava.sql.Timestampを使用することを提案した回答がありました。この小さな変更では、setTimestampメソッドが期待通りに機能します。

+0

タイムスタンプはJDK 1.1以降で廃止予定です – abbas

0

あなたはタイムスタンプ

@Temporal(TemporalType.TIMESTAMP)を保持しているあなたの変数に次の注釈を追加する必要があり

setParameterが働いている理由かもしれ

は、(それだけでオブジェクトを受け取り)とsetTimestampではありません。

+0

これはそれだとは思わない。フィールドは既に 'timestamp'タイプです。さもなければ、 'setParameter()'でもうまくいくとは思っていません。 – Raidok

+0

必ずしもそうではありません。 @Temporalアノテーションがなければ、フィールドはHibernateによってDATEとして扱われます。 setParameterを呼び出すときは、DATE型のフィールドにDateインスタンスをバインドします。全て大丈夫。 setTimestampを使用すると、TimestampオブジェクトをDATEフィールドにバインドします。それは同じことではありません。少なくともこのソリューションを試してみましたか? –