猿问

我是否必须在我的 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 中,我假设休眠有办法将其短路。

我试过寻找但找不到关于这个事实的文档。我也在移动自动取款机上,所以这妨碍了我的搜索(以及我发布这个!)


不负相思意
浏览 105回答 1
1回答

子衿沉夜

不,你没有。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顺便说一句,一个简单的测试可以让你自己找出答案。
随时随地看视频慕课网APP

相关分类

Java
我要回答