在Where子句和Order By中的派生属性

时间:2017-07-05 19:10:44

标签: sql jpa

我在我的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中不起作用。有一个简单的解决方案吗?

1 个答案:

答案 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;