过去,我使用 java.util.Calendar 和 Hibernate 3(来自 J-boss 5.1)和 @Temporal 注释。迁移到 Hibernate 4 (j-boss 7.1) 后,我在尝试使用 UserType 时遇到了这个 PropertyAccessException。
我的 UT 实际上只是 org.hibernate.type.StringType 的包装器,因为我只是将日历强制转换为字符串并返回以处理相对时间戳:没有时区的 SQL 时间戳。
原因:javax.persistence.PersistenceException:org.hibernate.PropertyAccessException:无法通过 [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 来解决它,以支持将时间戳设置为字符串、解析并在 setter 和 getter 中对其进行格式化。如果有人知道的话,我更喜欢使用 UserType 或一些更清洁的解决方案。