今天主要总结hibernate的Criteria标准查询,Criteria(标准)查询的功能非常强大,只要sql语句能解决的他就能解决,主要包括Example(示例查询),Restrictions(限制),Projections(投影),还有aggregation(聚会),离线查询,子查询。其中重点讲解关联查询,可以通过criteria.createCriteria()方法或criteria.createAlias()方法进行关联查询。我碰到了一个非常复杂的关联查询,sql语句如下:
String sql = select cp.id from ctl_project cp left join ctl_change_info cci on cci.ctl_project_id = cp.id group by cci.ctl_project_id having sum(CHAR_LENGTH(replace(cci.change_content_type,'conf',''))< CHAR_LENGTH(cci.change_content_type)) >=0 and cp.id in(select max(id) from ctl_project cp2 group by sale_no,intby2 );
其中ctl_project和ctl_change_info是一对多的关系,实现方法有两种:
一是直接执行sql语言:getSession().createSQLQuery("上述语句").getEntity(CtlProject.Class).list()。
另一种是要重点强调的,就是在criteria的基础之上添加原始的sql语句,因为要用到left join,所以原本简单的问题有点复杂了。试用了很多种方法,
(1)createAlias("ctlChangeInfo","change").add(Restrictions.sqlRestriction("上述语句on cci.ctl_project_id = cp.id 后面部分语句")),
(2)criteria.add(Restrictions.sqlRestriction("上述语句on 后面部分语句"))等等,能想到的几乎都想到了,都没效果,加了几次班,终于在今天周五把问题解决了,能过一个轻松的周末了,真有一种说不出的喜悦和高兴,就像打了一场胜仗一样。其实很简单:cr.createAlias("ctlChangeInfos", "change").add(Restrictions.sqlRestriction("上述语句on cci.ctl_project_id = cp.id之后,group by之前");但是要在group by之前添加“1=1” ,并且要将cp改成this_,将cci改成change1_就ok了,加“1=1”是因为criteria的add方法生成了where这一关键字,所以直接加“group by”是不行的,必须是“where 1=1 group by……”要加至于为什么要改成this_和change1_,这是hibernate运用时的别名,通过查看生成的sql语句得到的。
本文书写比较混乱,没有实际的参考价值,仅作为本人的总结。
分享到:
相关推荐
### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...
深入QBC查询.md可能涵盖了Hibernate的Query By Criteria API,这是另一种查询数据库的方式,除了传统的HQL(Hibernate Query Language)外,开发者可以通过构建Criteria对象来执行动态查询,这种方式更接近面向对象...
总结,Hibernate提供多种方式查询数据表中的字段,包括HQL、Criteria API和DetachedCriteria,选择合适的方法取决于具体需求。正确理解和使用Hibernate,能够大大提高Java开发中的数据库操作效率。
本文将对Hibernate HQL查询语法进行总结,涵盖基础查询、属性查询、实例化查询以及查询链接等多个方面。 1. 基础查询: 基础查询是最简单的HQL语句,用于获取所有`Student`对象。例如: ```java from Student ``` ...
本篇文章将深入探讨通用的Hibernate查询方法,特别是关于分页查询的应用。 在Hibernate中,查询数据主要通过Criteria、HQL(Hibernate Query Language)和Query API三种方式。首先,让我们来看看Criteria查询。...
根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...
Hibernate 是一个开源的对象关系映射(ORM)框架,它为 Java 开发者提供了一种在 Java 应用程序中管理关系数据库的方式。通过 ORM,Hibernate 可以将 Java 类与数据库表之间的映射关系自动化,从而简化数据访问层的...
总结所述,Hibernate为Java开发者提供了强大的数据库操作工具,通过理解并熟练运用其核心概念和技术,能极大地提升开发效率和应用质量。通过阅读提供的“hibernate课堂笔录_0906.txt”,可以进一步巩固这些知识,并...
总结,这个“简单的Hibernate应用”提供了学习和实践Hibernate的基础,包括如何配置、创建实体、执行查询以及在Web环境中集成Hibernate的方法。通过深入理解并熟练运用这些知识,开发者可以更高效地进行Java数据库...
2. **HQL(Hibernate Query Language)**:这是Hibernate提供的一种查询语言,类似于SQL,但更加面向对象。通过HQL,我们可以方便地查询数据库中的记录。 3. **Struts标签库**:Struts提供了一系列自定义的JSP标签...
Hibernate提供了一种面向对象的查询语言——HQL,类似于SQL但更加面向对象,可以方便地进行复杂的对象查询。 7. 第二级缓存: Hibernate支持第二级缓存,通过配置`cache.provider_class`可以选择缓存提供商。不过...
本篇将深入探讨Hibernate的四种主要关联关系:一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany),并结合实例来阐述每种关系的配置和使用。 1. **一对一关联(OneToOne)** 一...
总结来说,Hibernate是一个强大的ORM框架,它极大地简化了Java应用的数据库操作,提高了开发效率,并提供了高级特性如缓存、事务管理等。通过深入理解和熟练使用Hibernate,开发者可以构建更高效、更易于维护的...
Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。通过对象-关系映射(ORM),Hibernate可以自动将Java对象转化为数据库中的记录,并反之。这样,开发者无需编写大量的JDBC代码,就能...
Hibernate 是一个流行的 Java 应用程序框架,它提供了一种对象关系映射(ORM)解决方案,将数据库操作转化为面向对象的编程。此文档旨在研究和对比 Hibernate 技术的不同方面,帮助开发者更好地理解和利用其功能。 ...
Criteria API是Hibernate提供的另一种查询方式,它允许开发者通过构建对象化的查询条件来执行数据库查询。下面是如何使用Criteria API查找特定用户的示例: ```java Session session = sessionFactory.openSession...
本文将详细介绍 Hibernate 提供的几种查询方式及其应用场景。 #### 二、重要知识点 ##### 1. Session 对象与查询操作 在 Hibernate 中,所有持久化操作都需要通过 Session 对象来完成,包括查询操作。Session ...
例如,我们可以创建一个Session实例,通过它来执行HQL(Hibernate查询语言)或 Criteria 查询,获取或修改数据库中的数据。 此外,Hibernate还支持懒加载(Lazy Loading)、级联操作(Cascading)、集合映射...