如何在 hql 查询中将列的枚举类型转换为整数?
how to convert column's enum type to integer in hql query?
我有一个包含列枚举类型的实体。
实体中的定义列枚举类型如下:
@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
此查询 return 枚举类型的性别。
但我想获得性别序数而不是枚举类型。
如何将列的枚举类型转换为整数?
我用 spring 启动测试应用程序尝试了这个,它对我有用的唯一方法是在 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 或类似的东西。
我有一个包含列枚举类型的实体。
实体中的定义列枚举类型如下:
@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
此查询 return 枚举类型的性别。
但我想获得性别序数而不是枚举类型。
如何将列的枚举类型转换为整数?
我用 spring 启动测试应用程序尝试了这个,它对我有用的唯一方法是在 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 或类似的东西。