【问题标题】:Is there an JPQL null safe expression是否有 JPQL 空安全表达式
【发布时间】:2019-04-19 10:50:10
【问题描述】:

在以下 JPQL 查询中:

SELECT NEW com.java2s.common.EmployeeDetails(e.name, e.salary, e.department.name) FROM Employee e

如果e.departmentnull,我如何将null 传递给构造函数(作为第三个参数)?

如果e.departmentnull,我猜e.department.name 会导致异常?

【问题讨论】:

    标签: hibernate jpa jpql


    【解决方案1】:

    如果 e.department 为空,我猜 e.department.name 会导致异常?

    没有。 e.department.name 在 Employee 和 Departement 表之间进行隐式 inner 联接。因此,如果员工没有任何部门,则查询甚至不会返回该员工。

    如果您希望选择没有部门的员工,则需要 left 加入:

    select new com.java2s.common.EmployeeDetails(e.name, e.salary, d.name)  
    from Employee e
    left join e.department d
    

    上面的查询将返回员工的姓名和薪水,如果员工没有部门,则返回null作为部门的名称。

    注意:实验是将猜测转化为事实的一种非常好的方法。您为什么不尝试该查询而不是猜测它会做什么?

    【讨论】:

    • 目前,我正在尝试在 SO 上提问 :) 我对此不太熟悉 :)
    • 我做了更多实验:) 如果我想要e.department.id 而不是e.department.name,那么查询将本地化到当前表,因为需要所有信息。在这种情况下将没有连接。
    猜你喜欢
    • 2011-03-04
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2010-09-30
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多