У меня есть этот 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 или что-то в этом роде, мне нужна личная база данных и личная сущность, как она известна.