постоянное значение enum в бумага 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 ответов


предпочтительным способом было бы добавить параметры в запрос и передать экземпляр перечисления в качестве значения параметра, но если вы не можете (или не можете) сделать его параметризованным запросом, вы все равно можете сделать это с 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'";

убедитесь, что имена столбцов таблицы и новые экземпляры имен свойств класса одинаковы.