JPA @Query SpEL throwing EL1007E despite null checks

Viewed 49

I have this query:

@Query(value =
    "select distinct t from TimesheetReport t "
    + "where t.month = :month and t.year = :year and t.approvedByMaster = false "
    + "and (:#{#rule.employee} is null or :#{#rule.employee.id} is null "
        + "or t.account.id = :#{#rule.employee.id}) "
    + "and t.id in "
    + "(select distinct dt.timesheetReport.id from DailyTime dt "
    + "where (:#{#rule.project} is null or :#{#rule.project.id} is null "
        + "or dt.project.id = :#{#rule.project.id}) "
    + "and (:#{#rule.client} is null or :#{#rule.client.id} is null "
        + "or dt.client.id = :#{#rule.client.id})) "
    + "or t.id in "
    + "(select distinct cdt.timesheetReport.id from CustomDailyTime cdt "
    + "where (:#{#rule.project} is null or :#{#rule.project.id} is null "
        + "or cdt.project.id = :#{#rule.project.id}) "
    + "and (:#{#rule.client} is null or :#{#rule.client.id} is null "
        + "or cdt.client.id = :#{#rule.client.id}) "
    + ")"
)
Set<TimesheetReport> findTimesheetsMatchingManualApprovalRule(LeaderManualApprovalRulesDTO rule, int month, int year);

I know this is caused by employee object being null.

This happens despite first checking if employee in rule is null and then checking if employee object id field is null. I still get "Property or field 'id' cannot be found on null".

Is it because SpEL needs to be able to evalute every parameter before firing a query?

0 Answers
Related