2011-11-18 13 views
6

Ecco una versione minima del codice che mi ha portato un sacco di tempo per capire il motivo per cui non funziona:HibernateException con setTimestamp ma lavora con setParameter

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

 

L'errore era:

Unset positional parameter at position: 0 

 

Quando ho sostituito con setTimestamp()setParameter():

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

 

e ha funzionato, ma non riesco a capire perché. Sto usando Hibernate 3.2.1.

MODIFICA: Dove è finito il post con l'altro suggerimento? Era questo!!

+0

come si presenta la stringa di query? – Casey

+0

Era '" da Applicazioni s dove s.validUntil tra? E? "' (HQL). Entrambi erano in realtà da un oggetto 'Calendar' usando' cal.getTime() 'ma per semplificare, ho incluso solo un oggetto' Date'. L'errore rimane lo stesso in entrambi i modi. – Raidok

risposta

1

In precedenza una risposta suggeriva di utilizzare java.sql.Timestamp anziché java.util.Date. Con questa piccola modifica, il metodo setTimestamp funziona come previsto.

+0

Il timestamp è obsoleto a partire da JDK 1.1 – abbas

0

Nella tua mappatura potrebbe essere necessario aggiungere la seguente annotazione alla variabile che sta tenendo il timestamp

@Temporal(TemporalType.TIMESTAMP)

Questo potrebbe essere il motivo per cui setParameter sta lavorando (ci vuole solo un oggetto) e setTimestamp non è .

+0

Non penso che sia così. Il campo è già di tipo 'timestamp'. Altrimenti dubito che funzionerebbe anche con 'setParameter()'. – Raidok

+0

Non necessariamente. Senza l'annotazione @Temporal, il campo viene trattato come DATE da Hibernate. Quando si chiama setParameter, si associa un'istanza di data a un campo di tipo DATE. Va tutto bene. Con setTimestamp, si associa un oggetto Timestamp a un campo DATE. Non è la stessa cosa Hai almeno provato questa soluzione? –

Problemi correlati