6

İki Tarih arama alanına sahip ve arasında. StartDate'in arama alanlarına girilen tarihler ile tarihler arasında bulunduğu kullanıcı tablosundan kayıtları almam gerekiyor ve eğer tarihler boşsa ve tarihler boşsa kullanıcı tablosundan tüm kayıtları almam gerekiyor.Hql'de iki tarih arasında dinamik olarak nasıl arama yapılır?

İşte
FROM USER 
WHERE 
:start_flag =1 
OR 
STARTDATE between :from and :to 

start_flag gelen ancak ve boş olan için 1 olarak ayarlanır int türünde:

Aşağıdaki hql sorgusu çalıştı. İşte

query.setParameter("from",startDt); 
query.setParameter("to",endDt); 
query.setParameter("start_flag",startFlag); 
l= query.list(); 

veri türleri şunlardır:

startDt - java.util.Date

endDt- java.util.Date

startFlag- int

Yukarıdaki sorgu çalıştırdığınızda ile eşit ve null ile aşağıdaki özel durumları elde ederim:

SQL hatası: 932, SQLState: 42000

ORA-00932: tutarsız veri türleri: beklenen TARİH

nasıl yukarıdaki işlevselliği elde etmek HQL sorgu yazmak için söyler misiniz İKİLİ var? Böyle

+0

denedin 'setDate' (veya benzeri) yerine' setParameter' ait? Tarih türleri bir tarih sütuna doğru şekilde eşlenmiş mi (veya yanlışlıkla seri hale getirilmiş)? –

+0

Hayır Ben setDate() denemedim ama setParameteer() – user2077648

+0

çalışmalıyım NHibernate ile yaptığım deneyimde, öyle değil. –

cevap

9

filtre it:

String query = "FROM USER WHERE :start_flag =1 "; 
if(startDt!=null && endDt!=null){ 
    query +="OR STARTDATE between :start_date and :end_date"; 
} 

TypedQuery<USER> hql = entityManager.createQuery(query); 

if(startDt!=null && endDt!=null){ 
    hql.setParameter("start_date",startDt).setParameter("end_date",endDt); 
} 
List<USER> result = hql.setParameter("start_flag",startFlag).list(); 
+0

seri hale getirilip getirilmediğini bilmiyorum Üzgünüm, bu bir çözüm değil, bu işe yaramaz – user2077648

+0

işe yaramazsa örnek vermek için cevabımı düzenleyecektir Örnek – Angga

+0

Kriterler API'sini kullanarak tür sorgularının dinamik olarak oluşturulması daha uygundur. http://docs.oracle.com/javaee/6/tutorial/doc/gjitv.html – dbricman

İlgili konular