sql >> Database >  >> RDS >> PostgreSQL

Datumparameter doorgeven aan native query

U kunt een ZonedDateTime niet doorgeven aan een native SQL-query. Je moet het naar Agenda converteren:

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

En u kunt uw ZonedDateTime op deze manier converteren:

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

Deze aanpak wordt hier beschreven:link




  1. Wat zijn de regels voor het gebruik van interne parameters in SSRS

  2. Wijzig datumnotatie in mySql-databasetabel

  3. Hoe geef ik een Java-lijst met objecten door aan de Oracle Stored Procedure met MyBatis?

  4. Moet u altijd samenvoegen gebruiken in een WAAR als er null/lege waarden kunnen zijn in de kolommen die u vergelijkt?