我有一个简单的类实体,如果当前日期大于ScheduledClassDateTime,我想在其中自动将类的状态更改为Expired。

我的班级状态是一个类型为OnGoing和Expired的枚举。

我正在尝试使用以下内容将状态更改为“已过期”。

@Enumerated(EnumType.STRING)
@Formula(value = "case when class_Date_Time<now()) then 'EXPIRED' end ")
private ClassStatus classStatus = ClassStatus.OnGoing;


我收到以下错误(注意:此问题现已解决,但保存在下面以供其他参考)


  FUNCTION classDateTime.compareTo不存在
  
  org.springframework.dao.InvalidDataAccessResourceUsageException:无法提取ResultSet。 SQL [n / a];嵌套的异常是org.hibernate.exception.SQLGrammarException:无法提取ResultSet


更新


这个问题已经在@stainslav原始提示的帮助下解决了,这是因为使用了对象查询而不是本机查询。我更改了问题中的代码以反映这一点。
现在的问题是@Formula不会将EXPIRED保存到数据库中...它将变成空白。我不确定我在使用@Formula对吗


任何帮助表示赞赏

最佳答案

您的SQL错误

case when classDateTime.compareTo(LocalDateTime.now())<0 then 'EXPIRED' [else 'VALID'] end


其他部分是可选的。原始SQL Miss end

07-26 09:27