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

使用枚举类型的RSQL获取数据时,导致InvalidDataAccessApiUsageException

裴昊阳
2023-03-14

我有一个属性类型枚举的实体。我试图使用RSQL运行查询。我的疑问是

siteType==LOCAL

但是它导致以下异常,因为在查询中,我将siteType作为String Value传递,但在JPA中siteType是枚举。

org.springframework.dao.InvalidDataAccessApiUsageExcture:参数值[LOCAL]不匹配预期类型[com.dataservice.api.site.wrapper.SiteType(n/a)];嵌套异常是java.lang.IllegalArgumentExc0019:参数值[永久]不匹配预期类型[com.dataservice.api.site.wrapper.SiteType(n/a)]

@Entity
@Table(name = "SITE")
public class Site {

    @Id
    @Column(name = "ID", updatable = false, nullable = false)
    private Long id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "SITE_TYPE")
    @Enumerated(EnumType.STRING)
    private SiteType siteType;

枚举:

 public enum SiteType {
    LOCAL, ONDEMAND;}

RSQL代码:

Node rootSearchNode = new RSQLParser().parse(searchQuery);
    Specification<Site> siteSearchSpec = rootSearchNode.accept(new CustomRsqlVisitor<Site>());
    resultSitesList = siteDataService.getSitesBySearchQuery(siteSearchSpec);

共有1个答案

施锋
2023-03-14

问题是它不知道如何将枚举的字符串表示形式映射到实际的枚举类型。我面临同样的问题,并通过将实体更改为:

@Column(name = "SITE_TYPE")
private String siteType;

public void setSiteType(SiteType siteType) {
    this.siteType = siteType.name();
}

public SiteType getSiteType() {
    return Enum.valueOf(SiteType.class, siteType);
}
 类似资料:
  • 问题内容: 假设是,我将如何产生给定序数的枚举值? 问题答案: 足够了。一条线; 足够简单。

  • 问题内容: 我有一些类型的非变量(例如)。问题是:如何获取与变量引用的枚举常量相关的注释? 问题答案: 正如我已经提供的: 要更清楚: 在这种情况下,我们无需知道的真实类。

  • 问题内容: 例如,我该怎么做: 结果示例: 问题答案: 迅捷4.2+ 从Swift 4.2(使用Xcode 10)开始,只需添加协议一致性即可从中受益。要添加此协议一致性,您只需要在某处写: 如果枚举是您自己的,则可以直接在声明中指定一致性: 然后,以下代码将打印所有可能的值: 与早期Swift版本(3.x和4.x)的兼容性 如果您需要支持Swift 3.x或4.0,则可以通过添加以下代码来模仿S

  • 实际开发中,我们离不开定义常量,当我们需要定义常量时,其中一个办法是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12 当然这样做简单快捷,缺点是类型是 int ,并且仍然是变量。 那有没有什么好的方法呢? 这时候我们定义一个 class 类型,每个常量都是 class 里面唯一的实例。 正好 Python 提供了 E

  • 我想创建一个基于的颜色对象。我可以使用和获得相同的结果,我想知道其中一个是否比另一个更好。 使用: 它们在性能方面相等吗?有没有更好的kotlin方式达到同样的结果?

  • 当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12 好处是简单,缺点是类型是int,并且仍然是变量。 更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能: from enum import Enum