過去に、Hibernate 3 (J-boss 5.1 から) と @Temporal アノテーションで java.util.Calendar を使用しました。Hibernate 4 (j-boss 7.1) に移行した後、代わりに UserType を試すと、この PropertyAccessException に遭遇しました。
私の UT は、実際には org.hibernate.type.StringType の単なるラッパーです。これは、Calendar を強制的に文字列にして、相対タイムスタンプに対処するためです: タイム ゾーンなしの SQL タイムスタンプです。
原因: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not set a field value by Reflection setter of [my-class] org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1361) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final] で org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final] で org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:313) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final] で ...
この例外を修正する方法はありますか?
編集:当分の間、タイムスタンプを文字列にし、解析し、セッターとゲッター内でフォーマットすることを優先して、UserType をドロップすることで回避しました。誰かが知っている場合は、UserTypeまたはよりクリーンなソリューションを使用したいと思います。