过去我使用了带有Hibernate 3(来自J-boss 5.1)和@Temporal注释的java.util.Calendar。在转移到Hibernate 4(j-boss 7.1)之后,我在尝试使用UserType时遇到了这个PropertyAccessException。
我的UT实际上只是org.hibernate.type.StringType的包装器,因为我只是将Calendar强制转换为String并返回以应对相对时间戳:没有时区的SQL时间戳。
Caused by: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not set a field value by reflection setter of [my-class] at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1361) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final] at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final] at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:313) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final] ...
我是如何解决此异常的?
编辑:目前我已经通过删除UserType来支持将时间戳设置为字符串,解析并在setter和getter中对其进行格式化。如果有人知道,我更喜欢使用UserType或更清洁的解决方案。