如何在 JPQL 查询中获取枚举的值?

问题描述 投票:0回答:1

我有以下以枚举作为字段的实体:

@Entity
@Table(name = "example")
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class Example implements Serializable {

    @Id
    @Column(name = "id")
    private Integer id;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(name = "type")
    private Type type;
}

枚举:

public enum Type implements Serializable {
    EASY,
    NORMAL,
    HARD
}

最后我有以下 DTO:

public record ExampleDto(Integer id, String value) {
}

重要的是

ExampleDto#value
具有
String
类型而不是
Type
类型。我想使用 DTO 作为
Spring Data JPA
中的投影,但我有一个问题。我不明白如何在 JPQL 查询中将枚举值转换为字符串。我尝试做类似的事情:

@Query("""
       SELECT new com.example.project.ExampleDto(e.id, e.type.name)
       FROM   Example e 
       WHERE  e.id = :id""")
ExampleDto findById(Integer id);

但这不起作用。那么如何在 JPQL 中将枚举转换为字符串呢?可以吗?

java hibernate spring-data-jpa enums spring-el
1个回答
0
投票

在构造ExampleDto时,JPA会自动将枚举值转换为其名称作为字符串。您不需要在枚举上显式调用 name()。

@Query("""
       SELECT new com.example.project.ExampleDto(e.id, e.type)
       FROM   Example e 
       WHERE  e.id = :id""")
ExampleDto findById(Integer id);

© www.soinside.com 2019 - 2024. All rights reserved.