当前位置: 首页 > 知识库问答 >
问题:

在Spring JPA中使用@枚举和@公式与字段上的case

裴意
2023-03-14

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

我的类状态是一个枚举类型正在进行和过期。

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

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

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

函数classDateTime。compareTo不存在

组织。springframework。刀。InvalidDataAccessResourceUsageException:无法提取结果集;SQL[n/a];嵌套的异常是org。冬眠例外SQLGrammarException:无法提取结果集

使现代化

>

  • 这个问题已经在@stainslv原始提示的帮助下解决了,这是因为使用了Object查询而不是Native查询。我更改了问题中的代码来反映这一点。

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

    感谢您的帮助

  • 共有2个答案

    蒙墨竹
    2023-03-14

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

    classDateTime > CURRENT_TIMESTAMP
    
    程谦
    2023-03-14

    你SQL错了

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

    其他部分是可选的。原始SQL未命中end

     类似资料:
    • 问题内容: 我们有一个带有枚举字段-的实体,我们想使用JPA注释-为它设置默认值。 但是,当我们将实体保存到数据库时,此字段的值为和。对于布尔字段- 正确的默认值()已保存。 如果改为使用:,则会在保存时得到以下异常: 我们做错了什么?为什么它仅适用于布尔值? 问题答案: 当某些SQL代码在未为emailCommunicationStatus列指定任何值的情况下插入一行时,您所做的工作很有用。在这

    • 我有上面的列举 @JsonValue公共字符串getValue(){return value;} 部分和一个示例测试类,如。。。 公开课Foo{ 这个测试类打印出来 @jsonValue在作为map键的枚举字段上使用时不工作。 序列化映射时是否有方法将此枚举用作键? 谢谢

    • 我试图在Avro模式中创建Union字段,并用它发送相应的JSON消息,但要有一个字段-。 https://avro.apache.org/docs/1.8.2/spec.html#工会 具有相应JSON数据的最简单联合类型(avro模式)的示例是什么?(尝试制作不含NULL/空数据的示例和含NULL/空数据的示例)。

    • 我想映射2个模型,其中每个模型都有几乎相同的枚举。让我展示: 第一个模型有枚举: 第二个模型具有枚举: 我有这样的自定义映射方法: 然后我用: 但是你可以得到: 我还创建了枚举映射器,如: 但我不需要单独设置,只希望枚举字段映射到内部映射中。简单地说,当我做枚举时,也应该映射。 谢谢 p、 对不起我的英语,希望我的问题有意义:)

    • 问题内容: 我有这样的枚举: 有时我需要检查枚举中有多少个字段。最好的解决方案是什么?我应该使用方法“ values()。length”吗?也许,我必须像这样在枚举中创建常量字段: 什么是最快,更优雅的解决方案? 问题答案: 每次调用时,using 将创建该数组的新副本。有时我会创建自己的(或设置或映射,无论需要什么)以避免这种无意义的复制。不过,我 不会对其进行 硬编码…如果您只需要大小,则可以