Выполнить JPA / JPQL с оператором CASE WHEN с числами и строками - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть этот 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

note: .... означает больше условий Это простое заявление 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, и выдает мне эту ошибку:

Описание исключения: объект [ACTIVO], класса [class java.lang.String], из сопоставления [org.eclipse.persistence.mappings.DirectToFieldMapping [estadoActual -> PERSONAL.ESTADO_ACTUAL]] с дескриптором [RelationalDescriptor (nomina2019.Personal -> [DatabaseTable (PERSONAL)])], не удалось преобразовать в [класс java.lang.Integer]. \ nВнешнее исключение: java.lang.NumberFormatException: для входной строки: \ "ACTIVO \"

Я безуспешно пытался преобразовать поле estadoActual в char и некоторые другие обходные пути (в запросе jpql).

Как мне изменить запрос jpql, чтобы он выполнялся в контексте jpql?Я использую eclipselink 2.7.4 и eql (jpql с расширениями eclipselink) в качестве поставщика jpa.

Пожалуйста, имейте в виду, что меняя поле с Integer на String или что-то в этом роде, мне нужна личная база данных и личная сущность, как она известна.

...