HQL 中的常量枚举值

2022-09-03 06:53:38

我有一个工作查询,我需要通过使用常量枚举值进行过滤来修改它。

现在它看起来是这样的:

public static final String venueQuery = 
       "select distinct v from package.Venue v "
        + "<some joins here> "
        + "WHERE v.venueType = package.enums.VenueType.VOUCHER_PROVIDER ";

以这种方式更改数据会导致

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token

列定义如下所示:

@Enumerated(EnumType.STRING)
@Column(name = "venue_type")
private VenueType venueType;

枚举定义如下所示:

public enum VenueType {
    RESTAURANT, BAR, CAFE, FUN_CLUB, VOUCHER_PROVIDER
}

我确信查询的其他部分工作正常,因为在删除它之后,不会引发异常。

在 HQL 查询中设置常量枚举值是否有技巧?


答案 1

首选方法是向查询添加参数并将枚举实例作为参数值传递,但是如果您不(或不能)使其成为参数化查询,您仍然可以使用类似如下的串联来执行此操作:String

public static final String venueQuery = 
   "select distinct v from package.Venue v "
    + "<some joins here> "
    + "WHERE v.venueType = '" + VenueType.VOUCHER_PROVIDER.name() +"'";

如果你想要一个编译时常量查询:String

public static final String venueQuery = 
   "select distinct v from package.Venue v "
    + "<some joins here> "
    + "WHERE v.venueType = 'VOUCHER_PROVIDER'";

答案 2