web-dev-qa-db-ja.com

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クエリで一定の列挙値を設定するためのトリックはありますか?

13
joro

推奨される方法は、クエリにパラメータを追加し、列挙型インスタンスをパラメータ値として渡すことですが、パラメータ化されたクエリにしない(またはできない)場合でも、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'";
16
icza

テーブルの列名と新しくインスタンス化するクラスのプロパティ名が同じであることを確認してください。

0
Ankireddy Polu