[Seasar-user:20930] [S2JDBC] Enum 型カラムのIN条件での検索について
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2011年 7月 29日 (金) 17:29:12 JST
山本と申します。
お世話になっております。
S2JDBCのEnum型カラムのIN条件での検索について質問いたします。
公式ドキュメントを参考に学習テストをしております。
次のように、エンティティが列挙型のカラムについてIN条件で検索すると、
ClassCastExceptionが発生してしまいます。
■失敗するテストコード
/**
* @throws Exception
*/
public void testWhereJobTypeIn() throws Exception {
String[] jobTypes = new String[] { "SALESMAN" };
BeanMap w = new BeanMap();
w.put("jobType_IN", jobTypes);
List<Employee> results =
jdbcManager.from(Employee.class).where(w).getResultList();
for (Employee e : results) {
System.out.println(e.name);
}
}
■発生した例外
java.lang.ClassCastException
at java.lang.Class.cast(Class.java:2990)
at
org.seasar.extension.jdbc.types.EnumOrdinalType.toText(EnumOrdinalType.java:105)
at
org.seasar.extension.jdbc.util.BindVariableUtil.getBindVariableText(BindVariableUtil.java:155)
at
org.seasar.extension.jdbc.util.BindVariableUtil.getCompleteSql(BindVariableUtil.java:103)
at
org.seasar.extension.jdbc.query.AbstractQuery.logSql(AbstractQuery.java:166)
at
org.seasar.extension.jdbc.query.AbstractSelect.getResultList(AbstractSelect.java:170)
...
ちなみに、次のように、jobTypesをString型の配列ではなくJobType列挙型の配列
で宣言すれば検索できます。
■成功するテストコード
/**
* @throws Exception
*/
public void testWhereJobTypeIn() throws Exception {
JobType[] jobTypes = new JobType[] { JobType.SALESMAN };
BeanMap w = new BeanMap();
w.put("jobType_IN", jobTypes);
List<Employee> results =
jdbcManager.from(Employee.class).where(w).getResultList();
for (Employee e : results) {
System.out.println(e.name);
}
}
しかし、SAStruts+S2JDBCで開発する際に、検索条件はActionFormにString型で宣
言する(と思う)ので、
ActionあたりでJobType列挙型に変換しなければなりません。
公式ドキュメントを読むと、なんとなくString型の配列のまま検索ができそうな気
がするのですが…。
このような場合、やはりString型から列挙型に変換しなければならないのでしょう
か?
どなたかアドバイスよろしくお願いいたします。
山本 亮(やまもと りょう)
Seasar-user メーリングリストの案内