2011-11-18 20 views
6

Burada işe yaramıyor neden anlamaya bana çok zaman aldı kod minimal sürümü:HibernateException ama setParameter ile çalışır

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

 

hata oldu:

Unset positional parameter at position: 0 

 

Ben setParameter() ile setTimestamp() yerini zaman:

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

 

Ve işe yaradı, ama neden bilemiyorum. Hazırda bekletme 3.2.1 kullanıyorum.

DÜZENLEME: Diğer öneri ile yazı nereye gitti? Bu oydu!! eşlemenizde olarak

+0

Sorgunuz ne gibi görünüyor? – Casey

+0

Bu, "s ile" arasında "ve" (HQL) arasında s.validUntil olduğu "idi. Her ikisi de aslında 'Calendar' nesnesinden cal.getTime() 'i kullanıyorlardı ama bunu basit tutmak için sadece bir" Date "nesnesini dahil ettim. Hata, her iki şekilde de aynı kalır. – Raidok

cevap

1

Burada daha önce java.util.Date yerine java.sql.Timestamp kullanmayı öneren bir yanıt vardı. Bu küçük değişiklikle, setTimestamp yöntemi beklendiği gibi çalışır.

+0

Timestamp, JDK 1.1'den itibaren kullanımdan kaldırıldı – abbas

0

Eğer Zaman Damgası

@Temporal(TemporalType.TIMESTAMP) düzenliyor Değişkeniniz aşağıdaki ek açıklama eklemek gerekebilir

setParameter çalışıyor neden olabilir

(sadece bir nesne sürer) ve setTimestamp değil .

+0

Bunun böyle olduğunu düşünmüyorum. Alan zaten 'timestamp' türüdür. Aksi takdirde 'setParameter() 'ile çalışacağından şüpheliyim. – Raidok

+0

Mutlaka olmaz. @Temporal ek açıklama olmadan, alan, Hazırda Bekletme tarihine göre DATE olarak kabul edilir. SetParameter çağırırken, DATE türünde bir alana bir Date örneği bağlarsınız. Her şey yolunda. SetTimestamp ile bir DATE alanına bir Timestamp nesnesi bağlarsınız. Bu aynı şey değil. En azından bu çözümü denediniz mi? –

İlgili konular