我有一个简单的类实体,如果当前日期超过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 [不适用];嵌套异常是org.hibernate.exception.SQLGrammarException:无法提取ResultSet
更新
该问题已在@stainslav原始提示的帮助下得到解决,原因是使用了Object查询而不是Native查询。我更改了问题中的代码以反映这一点。
现在的问题是@Formula没有将EXPIRED保存到数据库......它将显示为空白。我不确定我正在使用@Formula
任何帮助表示赞赏
答案 0 :(得分:2)
您的SQL错误
case when classDateTime.compareTo(LocalDateTime.now())<0 then 'EXPIRED' [else 'VALID'] end
其他部分是可选的。原始SQL未命中end
答案 1 :(得分:1)
您必须在@Formula中使用本机SQL,例如:
classDateTime > CURRENT_TIMESTAMP