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 ...

5 komentářů:

Anonymní ř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.

RicharDW řekl(a)...

Myslím si, že pro firmy, které živí třeba galvanizace je tohle fakt docela super. Ale tak jako na druhou stranu je to prostě něco, co fakt může fungovat i v různých oborech. Takže je to pak hlavně o tom, jakým způsobem se ta funkce bude využívat.