我在我的SQL语句中返回一个名为“FULLNAME”的复杂派生属性,例如
select p.id,
nvl2(p.ID, upper(p.ATTR1) || ... decode(..) + ) as fullname, // details omitted
// ...
from
person_t p, ...
where
lower(fullname) like '%abc%'
order by
fullname asc;
以前我们使用的是Hibernate,它允许您为派生属性附加@Formula
注释;然后你可以在HQL中使用自定义字段。
但现在我们必须转换到JPA,我必须删除所有特定于Hibernate的东西。这需要重写为常规SQL。
自定义字段在(1)Where子句和(2)Order by in plain SQL中不起作用。有一个简单的解决方案吗?
答案 0 :(得分:0)
大多数数据库中不允许在where
中使用别名。而是按顺序通常是允许的。
所以你应该在哪里重复代码(与别名相关)
例如:
select p.id,
nvl2(p.ID, upper(p.ATTR1) || ... decode(..) + ) as fullname, // details omitted
// ...
from person_t p, ...
where lower( nvl2(p.ID, upper(p.ATTR1) || ... decode(..) + ) ) like '%abc%'
order by fullname asc;