sql >> Databáze >  >> RDS >> PostgreSQL

Předat parametr data do nativního dotazu

ZonedDateTime nemůžete předat do nativního SQL dotazu. Musíte jej převést na Kalendář:

@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);

A svůj ZonedDateTime můžete převést tímto způsobem:

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;
}

Tento přístup je popsán zde:odkaz




  1. Uložení USER_ID uživatele, který smazal záznam se spouštěčem v MySQL

  2. Měření výkonu databáze pod tlakem

  3. budování Aplikace založená na rolích

  4. Aktualizace celočíselného sloupce z člena jsonb se nezdaří s:sloupec je typu integer, ale výraz je typu jsonb