欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate关联表特殊查询(多方)上

程序员文章站 2022-03-02 13:50:19
...

/**
* 多条件组合查询
*/

public List getallByMoreWhere(String name,double price){
   List list=null;
   try {
    Criteria cri=this.GetSession().createCriteria(TShop.class);
    if(name!=null && name.length()>1){
     cri.add(Restrictions.like("SName", name,MatchMode.ANYWHERE));
    }
    if(price>0){
     cri.add(Restrictions.lt("SPrice", price));
    }
    list=cri.list();
   } catch (HibernateException e) {
    throw e;
   }finally{
    this.ColseSession();
   }
   return list;
}

 
测试:

List list=shopdao.getallByMoreWhere("", 50);
   Iterator cri=list.iterator();
   while(cri.hasNext()){
    TShop shop=(TShop) cri.next();
    System.out.println(shop);
   }

 
inner join on查询
/**
* 多对一中的多方的inner join on(主对象可以查出从对象,即使主对象中关与从对象的lazy="true"也是可以把从对象查询出来)
* 以TShop为主,若TShop的TType为空,则查询后没有这条记录。即查询结果都是非空的
* 这种方式List中存放的是Object的数组,Object[]中的元素才是TShop和TType
*/

public List getallByinnerjoinTtype(){
   List list=null;
   try {
    Query query=this.GetSession().createQuery("from TShop as s inner join s.TType");
    list=query.list();
   } catch (HibernateException e) {
    throw e;
   }finally{
    this.ColseSession();
   }
   return list;
}

 

测试:
/* 多对一中的多方的inner join on(主对象可以查出从对象,即使主对象中关于从对象的lazy="true"也是可以把从对象查询出来)
   * 以TShop为主,若TShop的TType为空,则查询后没有这条记录。即查询结果都是非空的
   */

List list=shopdao.getallByinnerjoinTtype();
   Iterator iter=list.iterator();
   while(iter.hasNext()){
    Object[] obj=(Object[]) iter.next();
    TShop shop=(TShop) obj[0];
    TType type=(TType) obj[1];
    System.out.println(shop.getSName()+" "+shop.getSPrice()+" 所属类别"+shop.getTType().getTName());
    System.out.println(type.toString());
   
   }

 
   inner join fetch查询
/**
* 多对一中的多方的inner join fetch(主对象可以查出从对象,即使主对象中关与从对象的lazy="true"也是可以把从对象查询出来)
* 以TShop为主,若TShop的TType为空,则查询后没有这条记录。即查询结果都是非空的
* 这种方式List中存放的是TShop对象,TShop.TType对象是非空的
*/

public List getallByinnerjoinTtype2(){
   List list=null;
   try {
    Query query=this.GetSession().createQuery("from TShop as s inner join fetch s.TType");
    list=query.list();
   } catch (HibernateException e) {
    throw e;
   }finally{
    this.ColseSession();
   }
   return list;
}

 
测试:
/**
   * 用的from TShop as s inner join fetch s.TType
   * 这样list中存放的就是TShop对象,但它会把一方也查出来,
   * 同样如查TShop对象对应的TType为null,这个TShop也不会查询出来,即查询结果都是非空的。
   */
  

 List list=shopdao.getallByinnerjoinTtype2();
   Iterator iter=list.iterator();
   while(iter.hasNext()){
    //这样就是错的
    //Object[] obj=(Object[]) iter.next();
    //TShop shop=(TShop) obj[0];
    //TType type=(TType) obj[1];
    //System.out.println(shop.getSName()+" "+shop.getSPrice()+" 所属类别"+shop.getTType().getTName());
    //System.out.println(type.toString());
    TShop shop=(TShop) iter.next();
    System.out.println(shop.getSName()+" "+shop.getSPrice()+" 所属类别"+shop.getTType().getTName());
   
   }

 

相关标签: Hibernate