以前はJavaのenumクラスを定数値として使用したことはありませんでしたが、これまでは一般的にpublic finalメソッドを使用してきました。私は今enumを使い始めました。私はtoString()メソッドをオーバーライドして、enum名とは異なる値を返します。Javaのenum toString()をオーバーライドする
名前付きパラメータを持つTypedQueryを作成するJPAコードがあります。そのうちの1つは列挙型の値です。 Status.ACTIVEを使用してパラメータを設定するだけでは、適切な「A」値が得られますが、型は実際にはStringではなくStatusであるため、例外がスローされます。これは、明示的にtoString()メソッドを呼び出す場合にのみ機能します。私は単純にtoString()メソッドをオーバーライドすると、クラスの型が何であってもString型が返されると考えました。
これがenumです:
TypedQuery<MechanicTimeEvent> query = entityManager().createQuery("SELECT o FROM MechanicTimeEvent o WHERE o.id.mechanicNumber = :mechanicNumber AND o.id.status = :status", MechanicTimeEvent.class);
query.setParameter("mechanicNumber", mechanicNumber);
query.setParameter("status", Status.ACTIVE.toString());
質問にそのフィールドのマッピングを追加できますか? – Augusto
もっと簡潔な記述方法を探しているなら、 'query.setParameter(" status "、Status.ACTIVE +" ");'が動作します。 – Eric
フィールドは '@ Entity'型の' Status'型で、 '@Enumerated(EnumType.STRING)'で注釈されていますか?もしそうなら、クエリでenumをうまく使うことができるはずです。 –