HQL中的常量枚举值

时间:2014-08-04 08:14:23

标签: java hibernate enums hql

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

现在它看起来像这样:

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查询中设置常量枚举值的技巧?

2 个答案:

答案 0 :(得分:13)

首选方法是将参数添加到查询中并将枚举实例作为参数值传递,但如果您不想(或者不能)将其作为参数化查询,则可以仍然可以使用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'";

答案 1 :(得分:0)

确保表格列名称&amp;新实例化的类属性名称相同。