9. listopadu 2010

Hibernate: rozdílné výsledky HQL a Criteria API?

Již je to nějaký čas, co jsem řešil problémy s Hibernate dotazy a v rámci ladění jsem už zkoušel všechno možné i nemožné a podařilo se mi, že jsem měl "stejné" dva dotazy, ale každý vracel jiné výsledky.

První dotaz je napsán pomocí Criteria API a v dané úloze správně nevrátil žádnou hodnotu. Druhý dotaz je napsán pomocí HQL a špatně najde jeden záznam (jednoho poplatníka).


Criteria criteria = createCriteria();
   
criteria.add(Restrictions.gt(DOaa_odpad_poplatnik.PLATNOST_OD, param.getDatum_posl_aktualizace_aa()));
    
List list1 = findByCriteria(criteria);

    



String hql = "select poplatnik from " + DOaa_odpad_poplatnik.class.getSimpleName() + " poplatnik "
        
+" where platnost_od > :datum";
    
Query query2 = createQuery(hql);
    
query2.setDate("datum", param.getDatum_posl_aktualizace_aa());
    
List list2 = query2.list();

Musím se přiznat, že do teď netuším, jak je to možné. Pokud někdo víte, budu rád, když se přiučím ...

4 komentáře:

Satai řekl(a)...

jak vypada ta polozka, co ji to spatne nejde? Je to vzdy ta sama? Kolik je v tabulce radku?

martiner řekl(a)...

Už jsem si zvykl, že HQL narozdíl od Criteria API občas nezvládne převést dotaz do SQL a správně ho uzávorkovat...
Mrkl bych se, co vám z toho vyrobí za SQL...

Petr Jůza řekl(a)...

Já nejsem schopen dodat nějaké přesné údaje, protože je to už nějaký čas - já jsem si to jen poznamenal a až teď jsem to dal na blog.

Řádků tam bylo řádově tisíce, nalezená položka byla pořád ta samá.

Martin Podval řekl(a)...

Stacilo by skomparovat vygenerovane SQL pro HQL i Criteria a uvidis vysledek a duvod hned.