Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring JPA中的字段上使用带大小写的@Enumerated和@Formula_Java_Spring_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java 在Spring JPA中的字段上使用带大小写的@Enumerated和@Formula

Java 在Spring JPA中的字段上使用带大小写的@Enumerated和@Formula,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我有一个简单的类实体,如果当前日期大于scheduledClassDateTime,我想在其中自动将类的状态更改为Expired 我的类状态是一个枚举,类型为“正在进行”和“已过期” 我正在尝试使用下面的更改将状态更改为已过期 @Enumerated(EnumType.STRING) @Formula(value = "case when class_Date_Time<now()) then 'EXPIRED' end ") private ClassStatus classStatus

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

我的类状态是一个枚举,类型为“正在进行”和“已过期”

我正在尝试使用下面的更改将状态更改为已过期

@Enumerated(EnumType.STRING)
@Formula(value = "case when class_Date_Time<now()) then 'EXPIRED' end ")
private ClassStatus classStatus = ClassStatus.OnGoing;
我得到以下错误提示:现在已解决,但保存在下面供其他人参考

函数classDateTime.compareTo不存在

org.springframework.dao.InvalidDataAccessResourceUsageException:无法提取结果集;SQL[n/a];嵌套异常为org.hibernate.exception.sqlgrammareexception:无法提取结果集

更新

该问题已在@stainslav原始提示的帮助下得到解决,原因是使用了对象查询而不是本机查询。我修改了问题中的代码以反映这一点

现在的问题是@Formula没有保存过期的数据到数据库中……它将显示为空白。我不确定我是否正确使用了@Formula

感谢您的帮助

您的SQL错误

case when classDateTime.compareTo(LocalDateTime.now())<0 then 'EXPIRED' [else 'VALID'] end
其中,其他部分是可选的。原始SQL未结束

您的SQL错误

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

其中,其他部分是可选的。原始SQL未结束

您必须在@Formula中使用本机SQL,因此类似于:

classDateTime > CURRENT_TIMESTAMP

您必须在@Formula中使用本机SQL,因此类似于:

classDateTime > CURRENT_TIMESTAMP

+哎呀……那是个打字错误。我更正了它,得到了以下错误-函数classDateTime.compareTo不存在。对问题进行了适当的编辑,并对您的努力进行了投票。现在您似乎正在尝试在SQL表达式中使用java类。DB不知道您的类。使用DB table column以及DB特定的表达式,而不是NOW。我使用的是JPQL查询,而不是本机查询。然而,我奇怪地面临一个问题,过期的数据没有保存到数据库中。我对@Formula的理解不正确吗?@Formula是只读表达式标记。它可以有一个表达式或甚至子选择,例如@Formulavalue=select count*from。。。其中,某个_id=id。它无法保存。我将引入两个字段——基于@Formula的只读字段和与real列关联的状态字段,以便保存它。还可以使用@PrePersist或@PreUpdate检查状态值,并从基于只读公式的字段更新状态。+1 Oops…这是一个输入错误。我更正了它,得到了以下错误-函数classDateTime.compareTo不存在。对问题进行了适当的编辑,并对您的努力进行了投票。现在您似乎正在尝试在SQL表达式中使用java类。DB不知道您的类。使用DB table column以及DB特定的表达式,而不是NOW。我使用的是JPQL查询,而不是本机查询。然而,我奇怪地面临一个问题,过期的数据没有保存到数据库中。我对@Formula的理解不正确吗?@Formula是只读表达式标记。它可以有一个表达式或甚至子选择,例如@Formulavalue=select count*from。。。其中,某个_id=id。它无法保存。我将引入两个字段——基于@Formula的只读字段和与real列关联的状态字段,以便保存它。还可以使用@PrePersist或@PreUpdate检查状态值,并从基于只读公式的字段.Thx更新状态。你说得对,但斯坦尼斯拉夫早就提出了这个建议+第1次。你说得对,但斯坦尼斯拉夫早就提出了这个建议+1.