java - 我是否必须防御性地保护 hql 查询中的空值?

标签 java hibernate hql

假设我有一家有电话号码的公司。我可能有潜在客户记录,并且想要获取电话号码的潜在客户。我是否必须首先确保我的公司不为空?

选项1

FROM Lead l WHERE l.company IS NOT NULL AND l.company.phone = :phone

选项2

FROM Lead l WHERE l.company.phone = :phone

在选项 1 中,我在检查电话之前确保公司不为空。在选项 2 中,我假设 hibernate 有办法短路它。

我尝试查找,但找不到有关此事实的文档。我也在移动自动柜员机上,所以这阻碍了我的搜索(以及我的发布!)

最佳答案

不,你不知道。 where l.company.phone = :phone 相当于inner join l.company c where c.phone = :phone,并且内部联接只会过滤掉实体其公司为空。

这些查询最终会转换为 SQL 并由数据库执行。他们不使用您的 Java 实体。相应的 SQL 查询如下所示

from lead l, company c where l.company_id = c.id and c.phone = :phone

顺便说一句,一个简单的测试就可以让您自己找出答案。

关于java - 我是否必须防御性地保护 hql 查询中的空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54161724/

相关文章:

java - Java中正负的情况下如何进行类型扩展?

java - 为什么有符号字节的大小不等于-128到128?

java - ByteBuffer 和 FileChannel 只读取指定数量的字节

java - JPA/Hibernate 单向 OneToMany 为 'mappedBy'

java - 在 hibernate 中使用 join 时映射实体类

java - HQL查询检查表是否有数据

hibernate - JPA 计数查询以按查询计算组的总结果行

java - 创建 ScriptC 时 RenderScript 崩溃

java - 在 spring mvc 应用程序中设置日期

具有外连接的 Hibernate HQL 查询