hibernate中使用criteria的复合查询

复合查询的应用:

package com.inspur.test;

 

import java.util.Iterator;

import java.util.List;

import java.util.Set;

 

import org.hibernate.Criteria;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

import org.hibernate.criterion.Expression;

 

import com.inspur.po.TAddress;

import com.inspur.po.TUser;

 

import junit.framework.TestCase;

 

public class TestCri extends TestCase{

    Session session=null;

 

    @Override

    protected void setUp() throws Exception {

       Configuration config=new Configuration().configure();

       SessionFactory sessionFactory=config.buildSessionFactory();

       session=sessionFactory.openSession();

    }

 

    @Override

    protected void tearDown() throws Exception {

       session.close();

    }

//  public void testCri(){

//     TAddress address=null;

//     TUser user=null;

//     Set addresses=null;

//     Criteria criteria=session.createCriteria(TUser.class);

//     List list=criteria.list();

//     for(int i=0;i<list.size();i++){

//         user=(TUser)list.get(i);

//         System.out.println(user.getName());

//         addresses=user.getTAddresses();

//         Iterator it=addresses.iterator();

//         while(it.hasNext()){

//            address=(TAddress)it.next();

//            System.out.println(address.getAddress());

//           

//         }

//        

//        

//     }

//    

//  }

    public void testCompositeQuery(){

       TUser user=null;

       TAddress address=null;

       Set addresses=null;

       Criteria criteria=session.createCriteria(TUser.class);

       Criteria addCriteria=criteria.createCriteria("TAddresses");

       addCriteria.add(Expression.like("address", "%hongkang%"));

       List list=null;

       list=criteria.list();

       for(int i=0;i<list.size();i++){

           user=(TUser)list.get(i);

           System.out.println(user.getName());

           addresses=user.getTAddresses();

           Iterator it=addresses.iterator();

           while(it.hasNext()){

              address=(TAddress)it.next();

              System.out.println(address.getAddress());

           }

       }

    }

   

 

}

复合查询是指在对象的复合属性上面,针对复合属性中的对象的属性指定查询条件,返回的是criteria中使用的Class类所描述的对象,然后有返回对象来获得复合属性中包含的对象以及对象属性。

原文地址:https://www.cnblogs.com/moonfans/p/2957183.html