Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.7K
Views
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 answers
Answer question

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 Report

0

class Employee { int id; Date birthDate; } List<Employee> findByBirthDateNotNullAndBirthDateLessThanEqualAndBirthDateGreaterThanEqual(Date startDate,Date endDate)
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!