2012-10-25 9 views
7

Wie schreibe ich eine Unterabfrage in Hibernate, die mehrere Unterabfragen hat. zum BeispielHibernate Unterabfrage detachedCriteria

select * from project_dtls where project_id in 
    (select project_id from project_users where user_id = 
    (select user_id from user_dtls where email='[email protected]')) 

Ich weiß, dass wir durch DetachedCriteria schreiben können, aber couldnot kein Beispiel, wo ich mehrere Unterabfragen verwenden kann.

Antwort

8

Hier ist ein Beispiel:

DetachedCriteria exampleSubquery = DetachedCriteria.forClass(MyPersistedObject.class) 
    .setProjection(Property.forName("id")) 
    // plus any other criteria... 
    ; 

Criteria criteria = getSession().createCriteria(ARelatedPersistedObject.class) 
    .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) 
    .add(Subqueries.propertyIn("myPersistedObjectId", exampleSubquery))); 

Für mehrere Unterabfragen Sie einen Booleschen Operator wie Restrictions.or verwenden können():

DetachedCriteria anotherSubquery = DetachedCriteria.forClass(MyPersistedObject.class) 
    .setProjection(Property.forName("id")) 
    // plus any other criteria... 
    ; 

Criteria criteria = getSession().createCriteria(ARelatedPersistedObject.class) 
    .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) 
    .add(Restrictions.or(
     Subqueries.propertyIn("myPersistedObjectId", exampleSubquery), 
     Subqueries.propertyIn("myPersistedObjectId", anotherSubquery))); 
+0

ich auf diese Weise versuchte dabei – DebD

+0

klingt wie es nicht tat Arbeit. Wenn Sie mehr Details zur Verfügung stellen können, vielleicht den Code, den Sie ausprobiert haben, können wir vielleicht mehr helfen. –

+0

Nun, Ihr Beispiel repliziert seinen Code nicht wirklich. Er hat eine Unterabfrage in einer Unterabfrage, aber Ihre ist nur ein OR. – AHungerArtist