Fix weird time bug
This commit is contained in:
parent
0e32aab244
commit
cfea7abff3
1 changed files with 13 additions and 4 deletions
|
|
@ -171,17 +171,26 @@ public interface ActivityRepository extends JpaRepository<Activity, UUID> {
|
||||||
java.math.BigDecimal sumElevationGainByUserId(@Param("userId") UUID userId);
|
java.math.BigDecimal sumElevationGainByUserId(@Param("userId") UUID userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Count activities by user and start time before a specific time.
|
* Count activities by user where the start time-of-day is before a specific time.
|
||||||
|
*
|
||||||
|
* <p>Uses the portable HQL {@code cast(... as time)} expression rather than
|
||||||
|
* {@code FUNCTION('TIME', ...)}: the latter calls a database-native function named
|
||||||
|
* {@code time}, which works on H2/MySQL but breaks on PostgreSQL — there {@code time}
|
||||||
|
* is a reserved type name and {@code time(column)} is parsed as an invalid type
|
||||||
|
* modifier, producing "syntax error at or near ...". {@code cast(x as time)} is
|
||||||
|
* standard HQL and Hibernate translates it to the dialect's native cast.
|
||||||
*/
|
*/
|
||||||
@Query("SELECT COUNT(a) FROM Activity a WHERE a.userId = :userId " +
|
@Query("SELECT COUNT(a) FROM Activity a WHERE a.userId = :userId " +
|
||||||
"AND FUNCTION('TIME', a.startedAt) < :time")
|
"AND cast(a.startedAt as time) < :time")
|
||||||
long countByUserIdAndStartTimeBefore(@Param("userId") UUID userId, @Param("time") java.time.LocalTime time);
|
long countByUserIdAndStartTimeBefore(@Param("userId") UUID userId, @Param("time") java.time.LocalTime time);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Count activities by user and start time after a specific time.
|
* Count activities by user where the start time-of-day is after a specific time.
|
||||||
|
* See {@link #countByUserIdAndStartTimeBefore} for why we use {@code cast} rather
|
||||||
|
* than {@code FUNCTION('TIME', ...)}.
|
||||||
*/
|
*/
|
||||||
@Query("SELECT COUNT(a) FROM Activity a WHERE a.userId = :userId " +
|
@Query("SELECT COUNT(a) FROM Activity a WHERE a.userId = :userId " +
|
||||||
"AND FUNCTION('TIME', a.startedAt) > :time")
|
"AND cast(a.startedAt as time) > :time")
|
||||||
long countByUserIdAndStartTimeAfter(@Param("userId") UUID userId, @Param("time") java.time.LocalTime time);
|
long countByUserIdAndStartTimeAfter(@Param("userId") UUID userId, @Param("time") java.time.LocalTime time);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue