[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 メーリングリストの案内