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