Dobry den,

Podla mna by Criteria API malo byt pouzite takto:


        Criteria criteria = 
session.createCriteria(Item.class).add(nejakyUzSelecnutyItem).createCriteria("category");
        criteria.add(Expression.like("key",  myCategoryKey  ); // B
        return criteria.list();

A mohlo by to fungovat. To co robite je vlasne inner join medzi dvoma tabulkami 
(triedami) a ten sa v Criteria API robi prave tak ako hore pisane. To co sa vy 
snazite urobit je skombinovat HQL (category.key) a Criteria API a to nieje 
mozne. 

Martin Krajci


-----Original Message-----
From: Petr Červinka [mailto:[EMAIL PROTECTED] 
Sent: Thursday, November 03, 2005 10:44 AM
To: Java
Subject: Hibernate criteria

Dobry den,

Mam  2 tridy (zjednodusene):

class Item{
    int id;
    Category category;
    BigDecimal price;

    // getters + setters ...
}

clas Category {
   int id;
   String key;
   ....
}

a pomoci Hibernate Criteria se snazim ziskat data:

        Criteria criteria = session.createCriteria(Item.class);
        criteria.add(Expression.gt("price", new BigDecimal(8000)  ));  // A
        criteria.add(Expression.like("category.key",  myCategoryKey  ); // B
        return criteria.list();

Kdyz pouziji radek oznaceny A vse funguje krasne a hibernate vrati 
ocekavana data. Pokud ale pouziji radek B hibernate skonci s chybou:

org.hibernate.QueryException: could not resolve property: category.key 
of: cz.test.model.Product

pritom

find("from Item it where it.category.key  like  ?", myCategoryKey); 
probehne v poradku

Plati pro Criteria nejake omezeni v tom smyslu, ze nemohu pouzit 
"propertyX.propertyY" ale mohu se pouze odkazovat na celou "propertyX" ? 
Nikde jsem nic takoveho nenasel.

Hibernate 3.0.5

mapovaci soubory jsou jednoduche:

    <class name="cz.test.model.Item" table="VI_PRODUCT" lazy="true">
        <id name="id" column="PRO_ID" unsaved-value="null">
            <generator class="increment"/>
        </id>
        <many-to-one name="category" column="CATEGORY_ID" not-null="true" />
        <property name="price" column="PRICE" />
    </class>

a

   <class name="cz.test.model.Category" table="VI_CATEGORIES" lazy="true">

        <id name="id" column="CATEGORY_ID" unsaved-value="null">
            <generator class="native"/>
        </id>
        <property name="key" not-null="true" column="CATEGORY_KEY"/>
        ...
    </class>

Diky za kazdou radu

Petr.

PS: Tridy jsou ve skutecnosti mnohem slozitejsi, stejne tak jako seznam 
omezujicich podminek pro vyber. Proto bych opravdu rad pouzivat Criteria 
API, abych nemusel dotaz sestavovat rucne.

Odpovedet emailem