2

(JPA/Hibernate を使用して) enum 型のエンティティを格納、取得、クエリできます。enum フィールドには、@Enumerated(EnumType.STRING) の注釈が付けられます。

のようなことは可能"SELECT a FROM MyEntity a WHERE a.myEnum LIKE :param"ですか?

アイデアは、列挙値文字列 (DB 内) が「SYSTEM_%」や「BUSINESS_%」などのパターンに一致する任意のエンティティに一致させることです。

助けてくれてありがとう。

- - アップデート:

これでクエリを実行しようとしたとき:

`@Query("SELECT e FROM MyEntity e WHERE e.myEnum LIKE :value")`

値を使用して (何でも一致することを示すために...):

%%

私はこの例外を受け取ります:

  Caused by: java.lang.IllegalArgumentException: Parameter value [%%] did not match expected type [mypackage.MyEntity$MyEnum]
        at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding(AbstractQueryImpl.java:370)
        at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:343)
        at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:374)
        at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:71)
4

4 に答える 4

2

絶対。を使用するだけquery.setString("param", "BUSINESS_%");です。HibernateがClassCastExceptionを列挙型にキャストしようとするときに、setParameter()代わりにを使用すると、ClassCastExceptionがスローされますが、希望どおりの結果が得られることに注意してください。setString()setString()

于 2012-05-31T00:17:13.623 に答える
0

回避策として、パターンをクエリに連結してクエリを作成できます。

em.createQuery("SELECT e FROM MyEntity e WHERE e.myEnum LIKE '" + pattern +"'")

Hibernate と Eclipselink で動作します。

patternただし、この方法でクエリを作成すると、SQL インジェクション攻撃に対して脆弱になるため、ユーザー入力から作成してこれを試さないでください。

于 2014-09-18T08:37:44.737 に答える