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.