I’m in process of upgrading from spring boot 2.x to 3.x and encountered a similar issue.
In my entity I have a LocalDateTime field which in my query (JPQL) I compare against ‘9999-12-31 23:59:00’
@Query("UPDATE DetailsEntity wt SET wt.updateBy = :user, wt.endDate = :endDate WHERE wt.type = :type AND wt.bankwideForecast = :scenario AND wt.endDate = '9999-12-31 23:59:00'")
void updateUpdatedByAndEndDate(@Param("user") String user, @Param("endDate") LocalDateTime endDate, @Param("type") RecordType type, @Param("scenario") String scenario);
After migration, I’m getting below error:
Caused by: org.hibernate.query.SemanticException: Cannot compare left expression of type 'java.time.LocalDateTime' with right expression of type 'java.lang.String'
What if you pass the value 9999-12-31 23:59:00 as a LocalDateTime param of your updateUpdatedByAndEndDate method ?
It should fix your issue and it will be also more generic.
I have the same error but with the “now()” function on my query:
@Query("SELECT count(u) FROM User u JOIN u.userEntities AS ue WHERE ue.id.entity.id = :entityUUID AND u.endValidity >= now() ")
int countValidUsersByEntity(@Param("entityUUID") UUID entityUUID);
@fykidwai instead of comparing a timestamp attribute to a string you should be using Hibernate’s datetime literals, for example:
wt.endDate = datetime '9999-12-31 23:59:00'
@LudoRb I suppose the now() expression in your query is a custom function of your database vendor. Please use Hibernate standard current_timestamp instead.