2010-12-11 88 views
1

我有映射到一个postgre表time without time zoneLocalTime场持久的实体,我填充这个领域我的应用程序是这样的: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" 

回答

2

嗯,这可能是过时的,但呼吁PersistentLocalTime一类的文档这样说:

通过休眠坚持本地时间为SQL TIME数据类型 - 注意,子第二个值不会被重复tained。该类型与org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime基本兼容。 但是请注意,由于使用Time.setTime(long),org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime包含一个错误,因为写入的时间将从GMT偏移。这个类不受这个问题的影响,但这意味着你不能依赖这种类型的解释对于这两个类都是一样的。

(重点煤矿。)

听起来你运行到这个问题,而是说使用PersistentLocalTime而是会解决它。

+0

yay,jon向救援团队求助=),只需要提一下在Hibernate项目的usertype中使用org.jadira.usertype.dateandtime.joda即可。作为映射文件中的类型,PersistentLocalTime可以有效地解决此问题。 – Harima555 2010-12-11 22:05:55