jodatime和休眠支持更改时区
问题描述:
我有映射到一个postgre表time without time zone
列LocalTime
场持久的实体,我填充这个领域我的应用程序是这样的:jodatime和休眠支持更改时区
int hour = 10
int minutes = 12
MyEntity e = new MyEntity()
e.setTime(new LocalTime(hour, minutes));
然后我坚持实体在数据库上使用休眠,稍后在应用程序中检索实体并显示时间字段,它正确显示10:12
,但是当我看到表上的值(使用pg-admin)时,它显示:04:12
它应该是10:12
,在我的jvm和我的系统中的时区是CST(UTC-6),在我看来,冬眠或乔达泰时间的某个地方是我的时间字段开始转换为我的时区,当插入到数据库和检索值时,我即时更正?是有防止使用JRE 1.6.0_22此behaivor ?, IM的任何方式,冬眠3,约达时间1.5.1和乔达 - 时间 - 冬眠1.2
编辑: 忘记提到该字段被映射在休眠:
type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime"
答
嗯,这可能是过时的,但呼吁PersistentLocalTime
一类的文档这样说:
通过休眠坚持本地时间为SQL TIME数据类型 - 注意,子第二个值不会被重复tained。该类型与org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime基本兼容。 但是请注意,由于使用Time.setTime(long),org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime包含一个错误,因为写入的时间将从GMT偏移。这个类不受这个问题的影响,但这意味着你不能依赖这种类型的解释对于这两个类都是一样的。
(重点煤矿。)
听起来你运行到这个问题,而是说使用PersistentLocalTime
而是会解决它。
yay,jon向救援团队求助=),只需要提一下在Hibernate项目的usertype中使用org.jadira.usertype.dateandtime.joda即可。作为映射文件中的类型,PersistentLocalTime可以有效地解决此问题。 – Harima555 2010-12-11 22:05:55