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.