PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Übergeben Sie den Datumsparameter an die native Abfrage

Sie können eine ZonedDateTime nicht an eine native SQL-Abfrage übergeben. Sie müssen es in Kalender konvertieren:

@Query(value = 
    "SELECT distinct a.* FROM action a "
    + "LEFT OUTER JOIN history h "
    + "ON a.id = h.action_id "
    + "AND h.user_id = :userId "
    + "WHERE a.occurrence='DAILY' AND (h.id IS NULL OR h.entry_date < :yesterday)", nativeQuery = true)
public List<Action> findAllAvailableActions(@Param("userId") Long userId, @Param("yesterday") Calendar yesterday);

Und Sie können Ihre ZonedDateTime auf diese Weise umwandeln:

public Calendar convertToDatabaseColumn(ZonedDateTime entityAttribute) {
    if (entityAttribute == null) {
        return null;
    }

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(entityAttribute.toInstant().toEpochMilli());
    calendar.setTimeZone(TimeZone.getTimeZone(entityAttribute.getZone()));
    return calendar;
}

Dieser Ansatz wird hier beschrieben:Link