Hoi allemaal,
Ik ben bezig om een criteria expressie op te zetten die gebruik zal maken van een join (inner). Hij moet ongeveer het volgende doen:
de 2 tabllen waar het omgaat zijn:
Domain (pk id, fk ppo_id, name)
Workmate (pk id, fk domain_id, fk ppo_id, name, ...)
De applicatie filters zullen dus de where clausule beinvloeden. En die stukje filter ik uit d.m.v. de if else statements. Dus als een if voldoet dan .add(Expression) etc. Op deze manier kan ik makkelijk een sql statement genereren dacht ik.
De code ziet er ongeveer zo uit:
de if en else statement handelen dus het toevoegen van criteria expressies af. Het gaat mis wanneer ik de nieuwe criteria creëer:
Criteria wm = dom.createCriteria("workmate");
Daar klapt die eruit. Ik denk zelf dat hij kijkt naar een overeenkomstige referentie colommen maar in dit geval refereert de workmate.domain_id naar domain.id.
Weet iemand hoe ik die join kan afhandelen?
Ik ben bezig om een criteria expressie op te zetten die gebruik zal maken van een join (inner). Hij moet ongeveer het volgende doen:
SQL:
1
2
3
| select this.ID as ID0_, this.PPO_ID as PPO_ID0_, this.DOMAIN_ID as DOMAIN_ID0_, this.FIRSTNAME as FIRSTNAME0_ from WORKMATE this inner join Domain that on this.DOMAIN_ID = that.id where (this.PPO_ID=24) and that.NAME like '%' |
de 2 tabllen waar het omgaat zijn:
Domain (pk id, fk ppo_id, name)
Workmate (pk id, fk domain_id, fk ppo_id, name, ...)
De applicatie filters zullen dus de where clausule beinvloeden. En die stukje filter ik uit d.m.v. de if else statements. Dus als een if voldoet dan .add(Expression) etc. Op deze manier kan ik makkelijk een sql statement genereren dacht ik.
De code ziet er ongeveer zo uit:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| Criteria dom = session.createCriteria(Domain.class); if (...) { dom.add( Expression.like( "id", workmate.getDomainId().toString())); } else if (...){ dom.add( Expression.like( "id", "'%'")); } if(...) { dom.add( Expression.like("name", search, MatchMode.ANYWHERE)); } else { dom.add( Expression.like("name", "'%'", MatchMode.ANYWHERE)); } Criteria wm = dom.createCriteria("workmate"); // hier klapt die eruit if (...) { wm.add( Expression.like( "firstname", search, MatchMode.ANYWHERE)); wm.add( Expression.like( "lastname", search, MatchMode.ANYWHERE)); } if (...) { wm.add( Expression.like( "isactive" , workmate.getIsActive(), MatchMode.ANYWHERE)); } wm.list(); |
de if en else statement handelen dus het toevoegen van criteria expressies af. Het gaat mis wanneer ik de nieuwe criteria creëer:
Criteria wm = dom.createCriteria("workmate");
Daar klapt die eruit. Ik denk zelf dat hij kijkt naar een overeenkomstige referentie colommen maar in dit geval refereert de workmate.domain_id naar domain.id.
Weet iemand hoe ik die join kan afhandelen?