我有这个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或类似的内容,因为我需要知道的个人数据库和个人实体。