使用带有数字和字符串的CASE WHEN语句执行JPA / JPQL

时间:2019-02-05 23:00:10

标签: sql oracle jpa eclipselink jpql

我有这个sql:

SELECT 
    PERSONAL.NUMERO_DCTO, 
    PERSONAL.ID_DE_EMPLEADO,  
    (PERSONAL.APELLIDO1 || ' ' || PERSONAL.APELLIDO2 || ' ' || PERSONAL.NOMBRES) AS NOMBRE_COMP, 
    CASE ESTADO_ACTUAL 
        WHEN 1 THEN 'ACTIVO' 
        WHEN 2 THEN 'PENSIONADO' 
        WHEN 3 THEN 'RETIRADO'
        .... 
        ELSE 'OTRO' 
    END AS ESTADO_ACTUAL 
FROM PERSONAL

注意:..表示更多条件 这是一个简单的sql语句,而estado_actual字段是oracle中的数字字段。映射的结果是一个名为personal的类,其字段名为“ private Integer estadoActual”

而且我需要它在jpa上下文中运行(保持数据库独立)

因此,我已转换为此jpql格式查询:

SELECT 
    personalm.numeroDcto, 
    personalm.idDeEmpleado, 
    ( CONCAT( CONCAT( CONCAT( CONCAT(personalm.apellido1,' ') ,personalm.apellido2) ,' ') ,personalm.nombres) ) AS NOMBRE_COMP, 
    CASE personalm.estadoActual 
        WHEN 1 THEN 'ACTIVO' 
        WHEN... 
    END AS ESTADO_ACTUAL 
FROM Personal personalm

当我想执行最后一个时,问题就来了,因为它试图将'activo'标签转换为Integer,并给我这个错误:

  

异常描述:类[class.java.lang.String]的对象[ACTIVO],来自带有描述符[RelationalDescriptor( nomina2019.Personal-> [DatabaseTable(PERSONAL)])]无法转换为[class java.lang.Integer]。\ n内部异常:java.lang.NumberFormatException:对于输入字符串:\“ ACTIVO \”

我没有运气地尝试将estadoActual字段转换为char和其他一些解决方法(在jpql查询中)。

我应该如何修改jpql查询以便在jpql上下文中执行它? 我正在使用eclipselink 2.7.4和eql(具有eclipselink扩展名的jpql)作为jpa提供程序。

请记住,将字段从Integer更改为String或类似的内容,因为我需要知道的个人数据库和个人实体。

0 个答案:

没有答案