в Java следующая распространенная идиома:
if( null != obj && obj.getSomeNumber() > 0 ) { ... }
Это будет выполнять проверку длины, только если null! = Obj true.Однако в JPA NamedQuery это не работает:
@NamedQuery(
name = "query"
query = "SELECT o FROM SomeObjectList o WHERE o.someObject is not null AND o.someObject.someNumber > 0")
(это то, что я ожидал, поскольку это также не будет работать в SQL.)
o.someObject либо'null' или внешний ключ к таблице, в которой хранятся SomeObjects.(Каждый столбец таблицы соответствует атрибуту SomeObject.)
------------------------- ----------------------------
| Table: SomeObjectList | | Table: SomeObject |
------------------------- ----------------------------
| id | someObject | | id | number | name |
------------------------- ----------------------------
| 1 | 4 | | 3 | -4 | foo |
------------------------- ----------------------------
| 2 | null | | 4 | 2 | bar |
------------------------- ----------------------------
Поэтому я хотел бы создать NamedQuery, который будет возвращать все объекты из SomeObjectList, у которых либо нет объекта (someObject == null)или где SomeObject.number> 0. В настоящее время я получаю все объекты и проверяю себя, установлен ли someObject.
Но есть ли способ получить аналогичное поведение в JPA или мне нужно выполнить проверки навозвращенные объекты?
edit: добавлена графика и устранена проблема.(Спасибо Джеймсу.)