-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Problem mit Criterias
PostPosted: Wed Dec 13, 2006 10:06 am 
Newbie

Joined: Wed Dec 13, 2006 9:44 am
Posts: 2
Hallo zusammen,

ich steh vor einem Problem im Zusammenhang mit Hibernate 3.2 und Criterias.

Ich versuche folgende SQL Query mittels Criterias im Hibernate umzusetzen,
aber ich bekomm's einfach nicht zum laufen. Es geht hier vor allem um die Joins und die where Klausel, in der sich ein "or" befindet.

Code:
select * from trov_travelinfo
join trov_companylocation company1 on trov_travelinfo.trv_start_companyloc_id = company1.colo_id
join trov_companylocation company2 on trov_travelinfo.trv_return_companyloc_id = company2.colo_id
where company1.colo_name like 'ABC%'
or company2.colo_name like 'XYZ%'


Das Problem ist, das ich das "or" einfach nicht hinbekomme.
Ich erzeuge mir für die beiden companies zwei critierias,
denen ich jeweils eine Disjunction hinzufüge.
Allerdings setzt mir Hibernate dann in der where Klausel ein
"and" (ist eigentlich klar, da es zwei Criterias mit jeweils eigenem Criterion sind).

Hier das Bsp. generiert von Hibernate:
Code:
from TROV.TROV_TRAVELINFO this_
      inner join TROV.TROV_COMPANYLOCATION trovcompan3_ on this_.TRV_START_COMPANYLOC_ID=trovcompan3_.COLO_ID
      inner join TROV.TROV_COMPANYLOCATION trovcompan2_ on this_.TRV_RETURN_COMPANYLOC_ID=trovcompan2_.COLO_ID
      where (lower(trovcompan2_.COLO_NAME) like ?) and(lower(trovcompan3_.COLO_NAME) like ?) ) where rownum <= ?


Hier auch noch der zugehörige Java Code:

Code:
        Criteria queryCriteria = session.createCriteria(TrovTravelInfo.class);
        Criteria subCriteria = queryCriteria.createCriteria("companyLocationStart");
        Disjunction disjunction1 = Restrictions.disjunction();
        disjunction1.add(Restrictions.ilike("name", "ABC%"));
        subCriteria.add(disjunction1);
       
        subCriteria = queryCriteria.createCriteria("companyLocationReturn");
        Disjunction disjunction2 = Restrictions.disjunction();
        disjunction2.add(Restrictions.ilike("name", "XYZ%"));
        subCriteria.add(disjunction2);


Vielleicht kann mir einer von Euch helfen, wie man mittels Criterias obige SQL Abfrage hinbekommt.

In jedem Falle Danke für Eure Mühe

Grüße

Anton


Top
 Profile  
 
 Post subject:
PostPosted: Thu Dec 14, 2006 5:39 am 
Newbie

Joined: Wed Dec 13, 2006 9:44 am
Posts: 2
Hallo zusammen,
nach langem rumprobieren hab ich nun das Problem sebst
lösen können.
Das Ganze funktioniert unter Verwendung von Subqueries.

Hier dier entsprechende Javacode:

Code:
        Criteria queryCriteria = session.createCriteria(TrovTravelInfo.class);
        Disjunction disjunction = Restrictions.disjunction();

        DetachedCriteria dCriteria1 = DetachedCriteria.forClass(TrovCompanyLocation.class);
        dCriteria1.setProjection(Property.forName("id"));
        dCriteria1.add(Restrictions.ilike("name", "ABC%"));
        disjunction.add(Subqueries.propertyIn("companyLocationStart", dCriteria1));

        DetachedCriteria dCriteria2 = DetachedCriteria.forClass(TrovCompanyLocation.class);
        dCriteria2.add(Restrictions.ilike("name", "XYZ%"));
        dCriteria2.setProjection(Property.forName("id"));
        disjunction.add(Subqueries.propertyIn("companyLocationReturn", dCriteria2));

        queryCriteria.add(disjunction);


Vielleicht hilft dies dem einen oder anderen von Euch weiter, der
vor einem ähnlichen Problem steht.

Grüße

Anton


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.