java - 如何在hql查询中将列的枚举类型转换为整数?

标签 java hibernate entity hql

我有一个包含列枚举类型的实体。
定义实体中的列枚举类型如下:

@Column(name = "gender", columnDefinition = "number(3)", nullable = false)
@Enumerated(EnumType.ORDINAL)
private Gender gender;

我在以下位置创建一个 hql 查询:

SELECT customer.nationalCode AS nationalCode,
       customer.firstName AS firstName,
       customer.lastName  AS lastName,
       customer.gender AS gender
FROM Customer customer

此查询返回枚举类型的性别。
但我想获得性别序数而不是枚举类型。
如何将列的枚举类型转换为整数?

最佳答案

我用 Spring Boot 测试应用程序尝试了这一点,它对我有用的唯一方法是将枚举转换为 HQL 中的 int:

SELECT customer.nationalCode AS nationalCode,
       customer.firstName AS firstName,
       customer.lastName  AS lastName,
       CAST(customer.gender AS int) AS gender
FROM Customer customer

我使用的模型是基于您的示例:

@Entity
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String nationalCode;
    private String firstName;
    private String lastName;
    @Column(name = "gender", columnDefinition = "number(3)", nullable = false)
    @Enumerated(EnumType.ORDINAL)
    private Gender gender;

    //getters and setters
}

和枚举:

public enum Gender {
    MALE, FEMALE;
}

编辑:当然,只有当您在实体中将枚举保留为 ORDINAL 时(就像您现在所做的那样),这才有效,否则您可能会得到 NumberFormatException 或类似的东西。

关于java - 如何在hql查询中将列的枚举类型转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48838685/

相关文章:

Python:在保留实体的同时解析 XML 文档

java - Hibernate 和存储过程(无参数和返回)

java - 程序化登录

java - Spring事务抛出异常后不回滚

java - XSLT:获取已声明实体的 URI

php - Symfony 2 必须实现 UserProviderInterface

java - 编码套路 : What is the optimal algorithm to solve this

java - 在 Java 中使用大写字母在 main 之外定义 Scanner 类型的常量是一个好习惯吗

java - 自定义默认登录页面 Alfresco

java - 使用 Hibernate 时使用 Services 和 DAO 获取 DTO 和实体的最佳实践