最近原Hibernate项目需要添加一个条件,结构有点类似下面的格式,学生和房间是多对一的关系,现在要查询所有没有房间的学生。

Class Student{

  @ManyToOne

  Room room;
}

一开始的查询语句是这样的:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Student> criteriaQuery = criteriaBuilder.createQuery(Student.class);
Root<Student> root = criteriaQuery.from(Order.class);
criteriaQuery.select(root);
//多条件查询
Predicate restrictions = criteriaBuilder.conjunction();
//组合条件
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(root.get("room"), null));
//将条件添加到查询
criteriaQuery.where(restrictions);

发现项目查询时会报错,最后查询文档http://www.objectdb.com/java/jpa/query/jpql/literal#Criteria_Query_Literals_

发现在JPA动态查询时,条件全是Expression类型

所以不能直接使用null,而需要把null转换成Expression类型,语句如下:

restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(root.get("room"), criteriaBuilder.nullLiteral(Room.class)));

修改完查询正常

Hibernate JPA 动态criteria语句针对null查询条件的特殊处理的更多相关文章

  1. Thinkphp的 is null 查询条件是什么,以及exp表达式如何使用

    Thinkphp的 is null 查询条件是什么,以及exp表达式如何使用 一.总结 一句话总结:$map['name'] = array('exp','is null'); 1.is null判断 ...

  2. Hibernate框架中Criteria语句

    在Hibernate中有一种查询语句是Criteria查询(QBC查询),今天呢 我们就一个个的详细的跟大家一起探讨Criteria语句的相关知识点 案例前的准备 //插入测试数据,构建数据库 pub ...

  3. Hibernate 多表查询 - Criteria添加子字段查询条件 - 出错问题解决

    Criteria 查询条件如果是子对象中的非主键字段会报 could not resolve property private Criteria getCriteria(Favorite favori ...

  4. 从sp_executesql中返回table型数据及动态SQL语句的参数化查询

    在返回分页数据时,我们会经常会用到参数化传递过滤条件,如何拼接SQL语句成了一个难题. 我们可以这样拼接: exec('sp_executesql sql语句,参数定义,参数值') sql语句和参数定 ...

  5. Hibernate JPA 如何使用SQL文直接查询

    对于复杂SQL,可以直接调用native sql来是实现 public List<Partner> findPartners() { List<Partner> partner ...

  6. springboot mybatis 下使用注解组织查询语句(有查询条件传入)

    @Select("<script>" + "select cab.brandpre_id,cab.brandpre_num_app,cab.id,cab.br ...

  7. MyBatis中动态SQL语句完成多条件查询

    一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...

  8. hibernate添加数据,默认字段为null的问题解决

    数据库中的一个字段默认为0,但是在用hibernate的添加之后,默认字段竟然不是0,为NULL. 查了一下.发现想要让默认字段生效.需要在*.hbm.xml添加一些参数,如下.(红色部分) dyna ...

  9. hibernate中带查询条件的分页

    所谓分页,从数据库中分,则是封装一个分页类.利用分页对象进行分页. 但,分页往往带查询条件. 分页类的三个重要数据:[当前页码数],[数据库中的总记录数],[每页显示的数据的条数] 原理:select ...

随机推荐

  1. 存储那些事儿(三):OpenStack的块存储Cinder与商业存储的融合

    OpenStack是一个美国国家航空航天局和Rackspace合作研发的云端运算‎软件,以Apache许可证授权,并且是一个自由软件和开放源代码项目.OpenStack是IaaS(基础设施即服务)‎软 ...

  2. 小强的HTML5移动开发之路(16)——神奇的拖放功能

    来自:http://blog.csdn.net/dawanganban/article/details/18181273 在智能手机发展飞速的现在拖放功能已经成为一种时尚,但是在我们的浏览器上是不是还 ...

  3. 【leetcode79】Single Number III

    题目描述: 给定一个数组,里面只有两个数组,只是出现一次,其余的数字都是出现两次,找出这个两个数字,数组形式输出 原文描述: Given an array of numbers nums, in wh ...

  4. Asp.Net中使用JQueryEasyUI--善良公社项目

    jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互.动画.特效和可更换主题的可视控件.我们可以直接用它来构建具有很好交互性的web应用程序 ...

  5. H5学习之旅-H5的元素属性(3)

    1.标签可以拥有属性,为标签提供更多的信息 2.属性以键值对的形式呈现例如:href = "www.baidu.com" 3.常用标签属性 :align对其方式 ,对齐方式,包括上 ...

  6. View,ViewGroup的Touch事件的分发机制

    原帖地址:http://blog.csdn.net/xiaanming/article/details/21696315 ViewGroup的事件分发机制 我们用手指去触摸Android手机屏幕,就会 ...

  7. Linux管理日记(一)

    作者: 铁锚 日期: 2013年12月23日 1. 安装 webmin # 安装 webmin cd /usr/local/ieternal/ mkdir download cd download w ...

  8. UTF-8是现在流行的编码方式,根据规定回答问题

    UTF-8是现在流行的编码方式,下面是RFC2279对UTF-8编码规则的规定 UCS-4 range (hex.) UTF-8 octet sequence (binary) 0000 0000-0 ...

  9. 【Android 应用开发】Android应用的自动更新模块

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 软件的自动更新一般都与Splash界 ...

  10. 【57】android图片印刻,阳刻,素描图效果处理

    介绍我参与开发的妙趣剪纸app使用的图片处理相关的技术 关于妙趣剪纸,各大android商店都可以下载,下面贴出小米商店的链接 妙趣剪纸下载 软件效果截图 如何实现上面的图片处理效果呢 1.初始化高斯 ...