[Seasar-user:20933] Re: [S2JDBC] Enum 型カラムのIN条件での検索について
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2011年 7月 29日 (金) 18:30:19 JST
小林 (koichik) です.
エンティティの enum 型のプロパティに付ける @Enumerated アノテーションで
EnumType.STRING を指定してみてください。
# DB のカラムも VARCHAR 等の文字列にする必要があります。
http://s2container.seasar.org/2.4/ja/s2jdbc_entity.html#列挙定義
Date: Fri, 29 Jul 2011 17:29:12 +0900
From: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:20930] [S2JDBC] Enum 型カラムのIN条件での検索について
> 山本と申します。
> お世話になっております。
>
> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
--
{
name: "Koichi Kobayashi",
mail: "[E-MAIL ADDRESS DELETED]",
blog: "http://d.hatena.ne.jp/koichik/",
twitter: "@koichik"
}
Seasar-user メーリングリストの案内