`
Poly
  • 浏览: 34395 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernat 使用Criteria查询多对多关系(SET集合)设置条件

阅读更多

在Hibernate众多查询方式的选择中,我本人由衷的喜欢Criteria这种方式对数据库进行操作,早在Hibernate出生就明确了其目标---让开发者不在头疼的写那些繁杂的native sql语句!Hibernate提供了HQL,方便查询的编写(以面向对象形式),但有的时候我们也会使用语义更加明确的Criteria进行数据的操作,在处理对象关联的时候,经常要对对象下的某个集合字段进行条件限制,多对多就是个很好的例子。比如下面的类:

public class MainClass
  { 
   protected long id;
   protected int type;
   protected Set<SubClass> 
   subs= new HashSet<SubClass>();
   ...... getter/setter
  } 
  public class SubClass
  { 
   protected long id;
   protected int value;
   protected Set<MainClass> ms = new HashSet<MainClass>();
   ...... getter/setter
  }

在初始化数据中,假设MainClass的实例m1含有SubClass的实例s1,s2,s3;MainClass的实例m2含有SubClass的实例s2,s3,s4。
  而其中s1,s2,s3,s4的value分别是1,2,3,4
  现在要查询出 MainClass中SubClass集合含有SubClass实例value为2的的MainClass实例并且type为1,可以使用下面的查询方法:
  

DetachedCriteria criteria = DetachedCriteria.forClass(MainClass.class); 
   criteria
   .add(Restrictions.eq("type", new Integer(1)))
   .createAlias("subs", "s")
   .add(Restrictions.eq("s.value", new Integer(2)));

 

  执行此查询对象后会得到符合条件的MainClass实例。
  需要注意的是在获取的MainClass实例中,subs是完全的记录集,而不是经过过滤的记录集,也就是相当于根据MainClass的ID获取的完整实例一样。因为在做查询时 表与表之间的关联查询一定是少不了了,所以灵活掌握其一些方法十分有必要。
  ps:
   如果需要过滤subs的记录集,需要使用额外的过滤方法,请参考Hibernate的具体实现。
   使用HQL也可以很方便地实现,但是需要给出完整的join标记,不如createAlias来得方面和直观。

        如果十分复杂的查询,对于hibernate来讲使用native sql会更为灵活一点,由Hibernate本身的封装特性决定了其使用,但不能不说它带来的巨大便捷性。

分享到:
评论

相关推荐

    Hibernat 使用Criteria查询多对多关系(SET集合)条件

    ### Hibernat 使用Criteria查询多对多关系(SET集合)条件 #### 背景介绍与概念理解 在Java开发中,特别是在企业级应用中,持久化层的处理至关重要。Hibernate作为一款流行的Java持久化框架,它提供了一种非常简便...

    hibernate 映射关系学习入门 多对多实体映射

    2. **关系属性**:在两个实体类中,分别定义一个表示多对多关系的集合属性,如`List`或`Set`,并使用`@ManyToMany`注解。 3. **中间表配置**:通过`@JoinTable`注解定义中间表的详细信息,包括表名、连接字段等。 4....

    hibernate(多对多关系映射)

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系映射是一种常见的数据库交互模式,它用于表示两个实体之间复杂的关系。在这个场景中,一个实体可以与多个其他实体相关联,反之亦然。例如,在学生和课程...

    Hibernate多对多关联关系demo

    - **查询关联**:可以使用HQL(Hibernate Query Language)或JPA的 Criteria API 查询关联的对象集合。 5. **级联操作**: 通过`cascade`属性,你可以控制实体间的级联操作,如`save-update`、`delete`等。这样,...

    hibernate 多对多源代码

    在Hibernate中,可以通过HQL(Hibernate Query Language)或JPA的`Criteria API`来查询多对多关联的数据。例如,可以查询某个学生的所有课程,或者查询包含特定学生的所有课程。 七、性能考虑 虽然多对多关联方便了...

    hibernate关系映射多对多关系

    本资料包主要关注的是Hibernate中的关系映射,特别是多对多(ManyToMany)关系,这对于理解和实现复杂的数据库模型至关重要。在Spring+Hibernate+Struts框架下,这种映射关系的应用更是常见。 首先,我们需要了解在...

    Hibernate多对多关系

    - **双向映射**:在多对多关系中,可以设置双向映射,意味着从双方实体都能访问到关联的实体集合。这需要在两个实体类中都添加`@ManyToMany`注解,并通过`mappedBy`属性指定对方的集合属性。 - **单向映射**:如果...

    Hibernate(多对多表操作)

    对于多对多关系,可以使用这些查询方式来获取特定学生的所有课程,或者获取包含特定学生的所有课程。 6. **事务管理**:由于多对多关系涉及到两个表的更新,因此通常需要在事务中进行操作。确保在操作前后正确地...

    hibernate多对多关系代码

    在Hibernate的XML映射文件中,我们需要使用`&lt;set&gt;`或`&lt;bag&gt;`元素来表示一对多关系的一端,而使用`&lt;many-to-many&gt;`元素表示多对多关系的另一端。例如,对于User和Role两个实体,User的映射文件可能有以下内容: ```...

    hibernate一对多,多对一,一对多双向关联

    “Hibernate 一对多,多对一,一对多双向关联”是指在Java持久化框架Hibernate中,实体间常见的三种关联关系。在数据库设计中,这种关联关系是常见的,例如一个用户可以有多个订单(一对多),一个订单对应一个用户...

    hibernate一对多关系

    同时,还可以使用Criteria、HQL或JPQL查询语言来检索一对多关联的数据。 总之,Hibernate的一对多关系是其强大功能之一,它简化了数据库操作,使得开发者能够更加专注于业务逻辑,而不是繁琐的数据访问。通过合理的...

    hibernate(user-role多对多映射)

    如果使用XML配置,需要在User和Role的映射文件中添加对应的`&lt;set&gt;`标签来描述多对多关系。 **四、操作示例** 1. **添加数据** 可以通过Session的`save()`或`saveOrUpdate()`方法添加新的User和Role实例,Hibernate...

    hibernate 一对多

    在父实体类中,使用`@OneToMany`标记一对多关系,在子实体类中,使用`@ManyToOne`表示多对一关系。 ```java // 父实体 public class Student { @OneToMany(mappedBy = "student", cascade = CascadeType.ALL) ...

    Hibernate 对集合属性的操作.zip_hibernate

    本资料重点探讨的是Hibernate对集合属性的操作,这是在实际项目开发中常见的需求,例如处理一对多、多对一、多对多等关联关系。下面将详细介绍Hibernate对集合属性的管理和操作。 1. **集合类型**:在Hibernate中,...

    hibernate 多对多操作

    标题“hibernate 多对多操作”表明了本文将探讨的是在Java编程中,使用Hibernate框架处理数据库中的多对多关联关系。Hibernate是Java领域广泛使用的对象关系映射(ORM)工具,它允许开发者用面向对象的方式处理...

    Hibernate持久化映射一对多和多对一

    理解并熟练掌握Hibernate的一对多和多对一映射,以及如何进行分页查询,对于开发复杂的Java应用程序至关重要。正确地配置和使用这些关系映射,可以有效地管理数据库中的关联数据,同时,利用分页技术,可以避免一次...

    day36 06-Hibernate抓取策略:set集合上的抓取策略

    今天我们将深入探讨"day36 06-Hibernate抓取策略",特别是针对set集合的抓取策略。在阅读这篇博客文章(链接:https://364232252.iteye.com/blog/2368811)后,我们将了解到如何优化数据加载,以避免N+1查询问题,...

    Hibernate 中的多对多的关系:

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系是数据库中常见的关联类型,它表示两个实体类之间可以有多个对应的关系。例如,学生和课程之间的关系,一个学生可以选择多门课程,一门课程也可以被多个...

Global site tag (gtag.js) - Google Analytics