2012-12-17 32 views
5

SQL ntranslated benim HQL geçerli:Parantez İşte

delete from `email` where `status`=? and `creation_time`<=? or `status`=? and `attempts`>=? 

Soru: Neden parantez SQL olmayan

İşte
Query query = createQueryOnCurrentSession("DELETE Email e " + 
       "where " + 
       "(status = :sent and creationTime <= :creation)" + 
       "or " + 
       "(status = :error and maxEttempts >= :maxEttempts)"); 

oluşturulan SQL nedir?

delete from `email` where (`status`=? and `creation_time`<=?) or (`status`=? and `attempts`>=?) 

Ben 2 istekleri silecektir olarak alternatif olabilir: Olmasını beklediğiniz?

delete from `email` where `status`=? and `creation_time`<=? 
delete from `email` where `status`=? and `attempts`>=? 
+0

şöyle parantez kaçan deneyin bağlantıyı takip edin: "' \ (' –

+0

tek' \ ("' (tabii ki) derleme ve çifte "\\ (" 'throw exception:' org.hibernate.QueryException: beklenmedik char: '\' [DELETE com.grroo.model.Email e nerede \ (status =: gönderilen ve yaratmaZaman <=: oluşturma \) veya \ (durum =: hata ve girişimler> =: maxAttempts \)] – urir

+0

Sanırım siz Sorgu dizgeni durumunuza ekleyebilir ve daha sonra –

cevap

8

Aslında bir özelliktir.

and, or'un üzerinde olduğundan hibernate bunu biliyor ve köşeli ayraçları kaldırıyor.

Bu köşeli ayraçlara ihtiyacınız yok.

+0

'u çalıştırabilirim, bazı veritabanlarında böyle olduğunu biliyorum ... ama hiç kullanacağım tüm DB için bir standart mı? Referans verebilir misiniz lütfen? Bulamadım ... – urir

+0

Sabit bir standart olup olmadığından emin değilim, ancak DB'lerin böyle kullanması gerektiğinden emin değilim. – Jaanus

+0

Bu tam olarak beni üzen şey. Belki de hazırda beklemeyi bırakmak için hazırda beklemenin bir yolu var mı? – urir

2

Mantıksal operatör VE mantıksal operatörü VEYA Operatör öncelik için

daha öncelik yüksek sırasını sahiptir

http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html 
http://msdn.microsoft.com/en-us/library/ms190276.aspx 

http://docs.oracle.com/html/A85397_01/operator.htm#997691 
+0

Burada, bu standardı kullanan en büyük 3 DB sağlayıcısı var. – Jaanus