我有以下以枚举作为字段的实体:
@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 中将枚举转换为字符串呢?可以吗?
在构造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);