Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.7K
Visualizações
PostgresSQL + Spring JPA: org.postgresql.util.PSQLException: ERROR: no se puede convertir el tipo bytea a la marca de tiempo sin zona horaria

cómo seleccionar filas según el rango de fechas cuando a veces el rango de fechas puede tener valores nulos (seleccionar todas las filas)

Tengo una tabla llamada Proyecto (id, nombre, fecha_certificación); el id es int, el nombre es varchar(250) y la fecha_certificación es la marca de tiempo.

Cuando se inserta un proyecto, solo se insertan la identificación y el nombre, pero la fecha_certificación es nula. Más tarde, el usuario puede certificar el proyecto, luego la fila se actualiza con la fecha_certificación con la fecha en que el usuario certifica el proyecto. Entonces, en la tabla del proyecto, puedo tener algunas filas con la fecha de certificación como nula y algunas con una fecha (por ejemplo, 2020-06-18 00:12:07)

Ahora tengo una consulta de búsqueda con nombre y tengo un filtro de fecha de inicio y fecha de finalización para filtrar la fecha de certificación. a continuación se muestra la consulta del Repositorio con la firma completa.

 @Query(value = "select distinct p.id, p.name, p.certification_date from project p WHERE (LOWER(p.name) LIKE CONCAT('%',LOWER(:searchKey),'%') and ((cast(:startDate as timestamp) is null or p.CERTIFICATION_DATE >= :startDate) AND (cast(:endDate as timestamp) is null or p.CERTIFICATION_DATE < :endDate ))", nativeQuery = true) public List<Object[]> searchProjects(@Param("searchKey") String searchKey, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

Entonces, cuando searchProjects() se ejecuta con todos los valores, devuelve los resultados correctamente. Pero cuando no necesito filtros de fecha, es decir, startDate y endDate son nulos, falla. (aquí no tenemos ningún problema con searchKey porque si searchKey es nulo, paso "" para que devuelva todos los valores)

La excepción es

 org.postgresql.util.PSQLException: ERROR: cannot cast type bytea to timestamp without time zone

Entonces, ¿qué debo hacer para que startDate y endDate sean opcionales, de modo que si esas fechas no se pasan simplemente devuelvan todas las filas (ya sea que la fecha de certificación sea nula o tenga algunos valores)?

También probé muchas soluciones de Stackoverflow pero no me funcionan.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

  1. JPA no puede distinguir el valor de 'null', especialmente para el mapeo de los tipos 'date, timestamp, timestamptz' en PostgreSQL.
  2. Mi solución de la siguiente manera:
 @Query(value = "select distinct p.id, p.name, p.certification_date from project p " + "where LOWER(p.name) LIKE CONCAT('%',LOWER(:searchKey),'%') " + "and (cast(cast(:startDate as text) as timestamp) is null or p.CERTIFICATION_DATE >= :startDate) " + "and (cast(cast(:endDate as text) as timestamp) is null or p.CERTIFICATION_DATE < :endDate)", nativeQuery = true) public List<Object[]> searchProjects(@Param("searchKey") String searchKey, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
over 4 years ago · Santiago Trujillo Relatório

0

class Employee { int id; Date birthDate; } List<Employee> findByBirthDateNotNullAndBirthDateLessThanEqualAndBirthDateGreaterThanEqual(Date startDate,Date endDate)
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda