JPA 2 Criteria API:为什么 isNull 在与 equal 结合使用时被忽略?

2023-12-26

我有以下实体类(继承自持久对象支持类):

@Entity
public class AmbulanceDeactivation extends PersistentObjectSupport implements Serializable {
    private static final long serialVersionUID = 1L;

    @Temporal(TemporalType.DATE) @NotNull
    private Date beginDate;

    @Temporal(TemporalType.DATE)
    private Date endDate;

    @Size(max = 250)
    private String reason;

    @ManyToOne @NotNull
    private Ambulance ambulance;

    /* Get/set methods, etc. */
}

如果我使用 Criteria API 执行以下查询:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<AmbulanceDeactivation> cq = cb.createQuery(AmbulanceDeactivation.class);
Root<AmbulanceDeactivation> root = cq.from(AmbulanceDeactivation.class);
EntityType<AmbulanceDeactivation> model = root.getModel();
cq.where(cb.isNull(root.get(model.getSingularAttribute("endDate", Date.class))));
return em.createQuery(cq).getResultList();

我在日志中打印了以下 SQL:

FINE: SELECT ID, REASON, ENDDATE, UUID, BEGINDATE, VERSION, AMBULANCE_ID FROM AMBULANCEDEACTIVATION WHERE (ENDDATE IS NULL)

但是,如果我将前面代码中的 where() 行更改为以下代码:

cq.where(cb.isNull(root.get(model.getSingularAttribute("endDate", Date.class))),
    cb.equal(root.get(model.getSingularAttribute("ambulance", Ambulance.class)), ambulance));

我得到以下 SQL:

FINE: SELECT ID, REASON, ENDDATE, UUID, BEGINDATE, VERSION, AMBULANCE_ID FROM AMBULANCEDEACTIVATION WHERE (AMBULANCE_ID = ?)

也就是说,isNull 标准被完全忽略。就好像它根本不存在一样(如果我只为 where() 方法提供相等的标准,我会打印相同的 SQL)。

这是为什么?这是一个错误还是我错过了什么?


我使用 EclipseLink 测试了您的代码和条件查询(您正在使用 EclipseLink,对吧?)并且我重现了该行为:isNull部分被忽略。

但是,使用 Hibernate Entity Manager 3.5.1 会生成以下查询:

select ambulanced0_.id as id7_, ambulanced0_.ambulance_id as ambulance5_7_, ambulanced0_.beginDate as beginDate7_, ambulanced0_.endDate as endDate7_, ambulanced0_.reason as reason7_ 
from AmbulanceDeactivation ambulanced0_ 
where (ambulanced0_.endDate is null) and ambulanced0_.ambulance_id=?

这是预期的结果。所以我想我们可以假设这是您的 JPA 2.0 提供商的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA 2 Criteria API:为什么 isNull 在与 equal 结合使用时被忽略? 的相关文章

  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • Java中RandomAccessFile的并发

    我正在创建一个RandomAccessFile对象通过多个线程写入文件 在 SSD 上 每个线程都尝试在文件中的特定位置写入直接字节缓冲区 并且我确保线程写入的位置不会与另一个线程重叠 file getChannel write buffe
  • 如何使用retrofit2动态设置超时?

    public class Router private static Retrofit retrofit null public Retrofit getRetrofit if retrofit null OkHttpClient clie
  • 如何实现具有LinkedHashMap类似功能的ConcurrentHashMap?

    我用过LinkedHashMap with accessOrdertrue 并同时允许最多 500 个条目作为数据的 LRU 缓存 但由于可扩展性问题 我想转向一些线程安全的替代方案 ConcurrentHashMap在这方面似乎不错 但缺
  • 通过 html tidy 提供渲染 jsp 页面

    我有一个在 Glassfish 上运行的 Java 项目 它会呈现一些难看的 HTML 这是使用各种内部和外部 JSP 库的副作用 我想设置某种渲染后过滤器 通过 HTMLTidy 提供最终的 HTML 这样源代码就很好且整洁 有助于调试
  • Java中的文字赋值[重复]

    这个问题在这里已经有答案了 定义上有什么区别 double example 23 1d or double example 23 1 为什么long float double可以以l f d结尾 之间没有区别double example 2
  • Spring boot 2.0.5.RELEASE和mongo 4.0连接问题

    我正在关注使用 MongoDB 访问数据教程春季网站 https spring io guides gs accessing data mongodb 我将 Mongo DB 服务器版本 4 安装为服务当我使用客户端连接到它时 它的身份验证
  • Java 流 - 按嵌套列表分组(按第二顺序列出)

    我有以下数据结构 每个学生都有一个州列表 每个州都有一个城市列表 public class Student private int id private String name private List
  • 如何将抽象工厂与单例模式结合起来? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在用 java 编码 并且对这些模式很陌生 谁能给我一个也使用单例的工厂抽象的例子 这是一个实现类的示例单例模式 这个实现也是线程安全
  • Active MQ - HelloWorld 示例异常

    我正在尝试运行 hello world 示例在这里找到 http activemq apache org hello world html I added activemq all 5 5 1 jar已经到图书馆了 它构建成功 但出现以下警
  • 全静态方法和应用单例模式有什么区别?

    我正在创建一个数据库来存储有关我的网站用户的信息 我正在使用 stuts2 因此使用 Java EE 技术 对于数据库 我将创建一个 DBManager 我应该在这里应用单例模式还是将其所有方法设为静态 我将使用这个 DBManager 进
  • AffineTransform.rotate() - 如何同时缩放、旋转和缩放?

    我有以下代码 它可以完成我想要绘制一个上面有一些棋子的棋盘的 第一部分 Image pieceImage getImage currentPiece int pieceHeight pieceImage getHeight null dou
  • 为什么我要使用责任链而不是 switch 语句

    考虑一下您已经获得了多次验证 仅当要检查的对象属于某种类型时 这些验证才应生效 为什么我要使用责任链而不是 switch 语句 责任链示例 public class Executor Inject private ValidatorFact
  • vm 参数中的 -D 是什么,它表示为什么我们必须在 vm 参数中始终指定 -D

    vm 参数中的 D 是什么 它表示为什么我们必须在 vm 参数中始终指定 D 有什么标准吗 如果是 那是什么以及指定的位置 D 设置当前运行的 java 程序可以访问的属性值 它允许程序员设置程序运行所需的值 但程序不知道这些值是什么 因此
  • Java 中更高级的泛型

    假设我有以下课程 public class FixExpr Expr
  • 如何使 JScrollPane 与嵌套 JPanel 一起正常工作?

    我正在使用 NetBeans 在 Java 中构建 Swing 应用程序 但我遇到布局问题 我的主框架包含一个JScrollPane其中包含一个JPanel called contentPanel其中又包含一个JPanel called l
  • Struts2中的变量声明

    Struts2中如何声明变量并为该变量赋值 使用设置标签
  • Lucene/Hibernate 搜索锁定异常

    我使用 Hibernate Search 在 Web 应用程序上索引和全文搜索项目 没有问题 来自我的 pom xml
  • Spring Boot 访问 H2 控制台

    我有一个基本的 Spring Boot 应用程序 嵌入式 Tomcat Thymeleaf 模板引擎 我创建了这个 bean 来访问控制台 Bean public ServletRegistrationBean h2ConsoleServl
  • 获取Java中ResultSet返回的行数

    我用过一个ResultSet返回一定数量的行 我的代码是这样的 ResultSet res getData if res next System out println No Data Found while res next code t

随机推荐

  • Python 访问字典列表中的字典

    您好 我有下面的字典 它有一个带有列表的值 列表内有一个字典 有没有办法使用键而不是列表索引来调用列表内的字典值 列表内的字典可能会有所不同 因此索引值可能并不总是提供正确的键值对 但如果我能够使用密钥 我总能获得正确的值 mylist m
  • 请求的资源上不存在“Access-Control-Allow-Origin”标头。与 github 站点

    http kingdiepie github io testing html http kingdiepie github io testing html XMLHttpRequest 无法加载https docs google com s
  • 在 PostgreSQL 和 Ruby on Rails 中使用间隔

    我想从 Rails 应用程序将持续时间 2 天 5 年 保存为 PostgreSQL 中的间隔 uration min 和uration max 都是 2 天 或 5 年 之类的值 因此它们各自都是一个间隔 def change creat
  • 如何防止控件改变Z顺序?

    我在 Net 中有用户控件 我在 WndProc 中使用命中测试 以允许在运行时使用鼠标调整其大小 问题是 命中测试成功后 按下鼠标 拖动以调整大小 释放鼠标 控件会按 Z 顺序向上跳跃并破坏其在窗体中的位置 我需要命中测试 因为它是一个非
  • 在 Jupyter 笔记本中使用 pandas 导入 csv 文件时出现 FileNotFoundError

    import pandas as pd df pd read csv home josepm Documents test ver2 csv FileNotFoundError Traceback most recent call last
  • 如何在javascript中检查日期是否在本周?

    我有这个日期 2016 04 23T11 45 00Z 我想在本周检查这个日期吗 Thanks 日期很难 我总是建议使用专用于日期处理的库 因为它可以减少代码中出现错误的机会 MomentJS http momentjs com 是一个很好
  • Notepad++ 将打开文档中的两行替换为其他 (10) 行

    我想用 Notepad 中的其他行替换两行 主要问题是我无法复制所有应该替换的行 如果我将所有行粘贴到 替换为 输入字段中 则只会将第一行插入该字段中 看来换行符没有正确复制 选择应插入 查找内容 字段中的行 带有换行符 非常容易 因为我可
  • 子子域上的通配符 SSL [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我们有一个通配符 SSL 证书 domain example 并拥有一个网站sub1 sub2 domain example macOS 上的 Saf
  • 加密云中的 HBase 静态数据

    我对 HBase 还很陌生 并被分配了一项将我们的基础设施迁移到云的任务 我们的 HBase 数据包含一些客户信息 因此需要在静态时进行加密 我已经在读这个了 静态数据的透明加密 http hbase apache org book ch0
  • Scrapy,start_url 限制

    我想知道是否有数量限制start urls我可以分配给我的蜘蛛吗 据我搜索 似乎没有关于列表限制的文档 目前我已经设置了我的蜘蛛 以便列表start urls从 csv 文件中读取 网址数量约为 1 000 000 个 本身没有限制 但您可
  • 为什么要分块写入 Stream?

    我想知道为什么这么多例子将字节数组读入卡盘中的流中 而不是一次全部读入 我知道这是一个软问题 但我很感兴趣 我对硬件有一些了解 并且填充缓冲区可能非常依赖于大小 并且您不想再次写入缓冲区 直到它被刷新到需要去的任何地方等 但是使用 Net平
  • nginx 错误:/etc/nginx/nginx.conf:76 中不允许使用“location”指令

    当我使用 sudo service nginx restart 重新启动 nginx 时 我面临这个错误 重新启动 nginx nginx emerg location 指令在 etc nginx nginx conf 76 中不允许 ng
  • 备份/恢复 AzureDevOps [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们使用的是 AzureDevOps 环境https dev azure com xxx https d
  • 如何在 C# 中读取 .xls 和 .xlsx 和 .xlsm 文件

    我使用 openfiledialog 并过滤它以获取 xls 和 xlsx 和 xlsm 文件 但我不知道下一步该做什么 我构建了一个具有名字和姓氏的工人类 我想从 Excel 文件中获取数据并将其放入变量中 这是我的 openfiledi
  • 如何在Golang中使用GORM for Mongodb?

    我是新来的go and MongoDB 我想使用 GORM 连接到 MongoDBgo lang 经过大量搜索 我仍然无法做到 简而言之 你不能 GORM http gorm io MongoDB 是为关系型数据库而创建的 MongoDB
  • Internet Explorer 中的 Go 和 Gorilla 会话

    我正在使用 Go 制作一个简单的 Web 应用程序 使用 gorilla 进行会话和路由 使用 Mustache 进行模板 我在登录时遇到问题 我相信是 IE 接受 cookie 的问题 该问题仅出现在 Internet Explorer
  • 错误:无法在截止日期前连接 URL:grpc://localhost:7051

    Documents test education LFS171x fabric material tuna app node query js Store path home Documents test education LFS171x
  • JPA 和 Hibernate Cascade DELETE OneToMany 不起作用

    我一直在阅读一篇又一篇的文章 试图让级联删除与最新的 Spring Boot 版本中的 JPA Hibernate 一起使用 我读过您必须使用 Hibernate 特定的级联 但我读过您不需要 我读到它们只是不起作用 但它似乎是一个混合包
  • Android Studio导入项目错误

    我在网上下载了一些示例 Android 项目 导入 android studio 但不起作用 举个例子http developer android com training implementing navigation terior ht
  • JPA 2 Criteria API:为什么 isNull 在与 equal 结合使用时被忽略?

    我有以下实体类 继承自持久对象支持类 Entity public class AmbulanceDeactivation extends PersistentObjectSupport implements Serializable pri