我有一个简单的类实体,如果当前日期大于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