`

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

阅读更多

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

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多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。Hibernate作为一款流行的Java持久层框架,提供了一种非常便捷的方式来处理...

    Hibernate连表查询 Hibernate连表查询

    根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...

    Hibernate 多表连接分页查询示范项目

    总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...

    hibernateHQL关联查询

    Hibernate HQL关联查询遵循了SQL中连接查询的概念,但在语法上有所区别,使其更符合面向对象编程的习惯。Hibernate支持以下几种连接查询方式: 1. **内连接(Inner Join)**:`INNER JOIN` 或 `JOIN` ```java ...

    hibernate关联查询 实例源码

    hibernate关联查询 实例源码 java web 如果不明白hibernate关联查询不明白的可以看看,保证马上学会,注释,数据库都有,很简单易学的源码,谢谢下载!

    hibernate关联映射详解

    hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的...

    hibernate 多表查询

    hibernate 多表查询 hibernate 多表不同于一般的sql嵌套查询,嵌套查询是不支持的,所以必须要配置好才能实现多表!只要配置好了,还是特别好用的

    hibernate 多表关联 中间表

    在处理多表关联时,Hibernate提供了一种高效且灵活的方法,尤其是当涉及到中间表的情况。中间表通常用于实现多对多(Many-to-Many)的关系,比如在一个用户和角色的关系中,一个用户可以有多个角色,一个角色也可以...

    Hibernate关联关系练习【全】

    在Hibernate中,这需要通过一个中间表(也称为关联表或连接表)来实现,对应的注解是@ManyToMany,同时需要定义@JoinTable,包括joinColumns和inverseJoinColumns来指定双方的引用。 在"HibernateSelect"这个文件名...

    hibernate 关联表问题

    NULL 博文链接:https://lf6627926.iteye.com/blog/1176785

    hibernate关联映射实例

    本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中至关重要的概念。 1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,...

    Hibernate基于连接表的一对多单向关联

    总结,"Hibernate基于连接表的一对多单向关联"涉及到的主要知识点包括:数据库设计的一对多关系、Hibernate的实体映射、单向关联的配置、以及如何在Java代码中操作和查询这种关联。理解并熟练应用这些知识点,对于...

    hibernate多表查询详解

    对象方式的查询是Hibernate的一大特色,它通过建立实体类间的关联关系来实现多表查询。这种方式更加面向对象,易于理解和维护。例如,如果Table1和Table2存在一对多关系,我们可以在Table1的实体类中定义一个Table2...

    Hibernate多表关联配置及错误解决方法

    在处理多表关联时,Hibernate提供了多种关联类型,包括一对一(OneToOne),多对一(ManyToOne),一对多(OneToMany)和多对多(ManyToMany)。本文将详细介绍这些关联配置以及如何解决可能出现的错误。 **一对一关联...

    Hibernate 关联关系解除

    本文将深入探讨Hibernate中的关联关系解除,包括一对多、多对一、一对一以及多对多关系的解除,以及如何通过源码理解和使用相关工具进行操作。 一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种...

    Hibernate关联映射

    9. Hibernate 一对一外键双向关联、主键双向关联、连接表双向关联、一对多外键双向关联、一对多连接表双向关联、多对多双向关联: 这些关联方式与单向关联类似,区别在于两个实体类都知道彼此的关联。在双向关联中...

    hibernate关联关系总结

    Hibernate关联关系是Java持久化框架Hibernate中的核心概念,它允许我们在数据库中建立对象之间的关系映射,以便在程序中操作对象时,可以自动处理与数据库的交互。本篇将深入探讨Hibernate的四种主要关联关系:一对...

    hibernate映射关系关联查询

    关于hibernate的关联操作 分享下

Global site tag (gtag.js) - Google Analytics