我有一个工作查询,我需要通过使用常量枚举值进行过滤来修改。
现在它看起来像这样:
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查询中设置常量枚举值的技巧?
答案 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;新实例化的类属性名称相同。