- PR -

JPA(hibernate)で列挙型配列を使うとロールバック

1
投稿者投稿内容
hekigyoku
会議室デビュー日: 2008/12/16
投稿数: 17
投稿日時: 2009-01-25 08:01
あるEJB3.0 Entityをinsertすると、

StandardWrapperValve[NewServlet]: PWC1406: サーブレット NewServlet の Servlet.service() が例外をスローしました
javax.ejb.EJBException: Transaction aborted; nested exception is: javax.transaction.RollbackException: トランザクションにロールバックのマークが付けられています。
javax.transaction.RollbackException: トランザクションにロールバックのマークが付けられています。
at com.sun.enterprise.distributedtx.J2EETransaction.commit(J2EETransaction.java:440)
at com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.commit(J2EETransactionManagerOpt.java:371)
。。。。

上記のような例外に悩まされ続けていました。調査した結果
new PCUsage[]{PCUsage.プレゼン}

こんなような列挙型配列を入れると上記エラーが出ることがわかりました。
new String[]{"",""}これだと出ないし、ただの列挙型でも出ませんでした。

toplinkだと出ないし、hibernateでも構築は通るのですが、実行時に値を入れると出ます。
原因、解決法をご存知の方いませんか?
hekigyoku
会議室デビュー日: 2008/12/16
投稿数: 17
投稿日時: 2009-01-25 09:44
とりあえず、
<T extends Enum> T[] valueOf( Class<T> t, String[] args);
String[] toString(Enum[] enums);

の2つのメソッドでString[]<==>Enum[]を変換して、DBにはString[]を入れる事に
して急場を凌ぎました。

実際問題、Enum[]を扱えるtoplinkと扱えないhibernate、どっちがJPA実装としては
正しいのでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)