toto je v poriadku:

Criteria dateValidCriteria = session.createCriteria(ObjectA.class).
                                 setFetchMode("loads", FetchMode.SELECT).
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

ale ked tam pridam subqueries (podmienka na asociovane objekty je disjunction):

Criteria dateValidCriteria = session.createCriteria(ObjectA.class).
                                 setFetchMode("loads", FetchMode.SELECT).
                                 createCriteria("loads").
                                 add(disjunction).
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

tak toto nefunguje.

Ivan

Ivan Polák  wrote / napísal(a):
dakujem, dakujem, dakujem, to je ono.

velka vdaka.

Ivan

Lukas Barton  wrote / napísal(a):
Prominte, mam v tom chybu, prohodil jsem si konstanty (dobre ze uz EAGER deprekovali a misto neho je jasnejsi JOIN).
Dejte tam FetchMode.SELECT.

Jinak pro podminky na asociacovane objekty musite pouzivat Subqueries.
Ale je v tom hodne bugu a moc to nefunguje - http://opensource.atlassian.com/projects/hibernate/secure/IssueNavigator.jspa?reset=true&&pid=10031&query=Subqueries+&summary=true&description=true&body=true&status=1&status=3&status=4 Takze radeji pouzijte HQL s exists nebo SQL podminku prilepenou do criteria.

 Lukas


Ivan Polák napsal(a):
nepomohlo ani to, nie je nejaky problem v anotaciach ?

objektA obsahuje:

@OneToMany(mappedBy = "objectA", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
   @JoinColumn(name = "owner_id")
   private List<Load> loads;

a objekt Load:

@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn(name = "owner_id", referencedColumnName = "id", nullable = false)
   private ObjectA objectA;

Ja bych to napsal takto, bez toho transformeru - ten totiz bez az v pameti - nepreklada se do sql.

Criteria dateValidCriteria = session.createCriteria(ObjectA.class).
setFetchMode("loads", FetchMode.EAGER);

 Lukas












Odpovedet emailem