冬眠4和约达时间
他们幸福地结婚了吗?
我正在使用最新版本的hibernate(4)和joda-time hibernate支持版本1.3,我也认为这是最新版本。
在使用注释时,一切似乎都正常(按预期创builddate列):
@Column @Type(type="org.joda.time.contrib.hibernate.PersistentLocalDate") private LocalDate myDate;
他们一起使用这些版本的任何已知的问题?
更新好的结果是列创build,但无法填充任何数据:
处理程序处理失败; 嵌套的exception是java.lang.AbstractMethodError:org.joda.time.contrib.hibernate.PersistentLocalDateTime.nullSafeSet
他们是不相容的,我应该使用usertype 。 见下面的答案。
明显缺乏文档,意味着我可能会写下集成所需的步骤。 确保你的库是最新的。
你需要:[假设你已经有了hibernate4]
约达时间的最新版本
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.0</version> </dependency>
和usertype lib
<dependency> <groupId>org.jadira.usertype</groupId> <artifactId>usertype.core</artifactId> <version>3.0.0.CR1</version> </dependency>
然后在实体类中使用以下内容(不必是LocalDateTime,可以是任何可用的持久化类):
import org.joda.time.LocalDateTime;
和列定义:
@Column(name="updated", nullable = false) @Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime") private LocalDateTime updated;
我将添加这个作为一个单独的答案,因为在我看来,任何人升级到Hibernate 4的重要信息,并需要迁移到使用jadira的持续时间types。 这个网页在hibernate 4和jodatime的谷歌search结果中排名很高,所以我会在这里添加它。 (有关此问题的单独讨论,请参阅: Joda时间DateTime错误地存储在数据库中 )
如果你在UTC以外的时区,需要一个重要的configuration,以获得与使用joda-time hibernate-supporttypes相同的行为。 jadira的临时types在缺省情况下工作的方式是将所有值转换为UTC时区,然后再保存到数据库,并在从数据库加载值时转换回系统的时区。
升级后我被烧毁了,当时我在数据库中有很多时间戳(UTC + 1(+2,夏令时))。 在升级到Hibernate 4之后加载时,1或2小时(取决于时间戳是否在夏令时间)被添加到数据库中的值,这意味着所有现有的时间戳被错误地呈现。 此外,新的时间戳值与UTC时区一起存储在数据库中,导致它们在应用程序中正确显示,但是在数据库中是错误的。 总而言之,时区和时间戳的混乱。
因此,为了得到与joda-time hibernate-support相同的行为(date时间被保持在所讨论服务器的时区中,数据库中的时间戳与正在加载到应用程序中的时间戳相同) ,以下属性必须添加到JPA / Hibernateconfiguration(在我的情况下, hibernate.properties
):
jadira.usertype.autoRegisterUserTypes=true jadira.usertype.databaseZone=jvm jadira.usertype.javaZone=jvm
这将确保数据库中的时间戳与应用程序的时区相同,而时区又是jvm的时区(大多数情况下是应用程序服务器的时钟)。
此外,据我所知, autoRegisterUserTypes
属性删除了对@Type
的注释的select通用types,其中Jodatimetypes的DateTime
和LocalDate
。
- ORDER BY使用Criteria API
- DAO和Repository模式有什么区别?
- Hibernate EnVers中的@NotAudited和RelationTargetAuditMode.NOT_AUDITED有什么区别?
- Hibernate延迟加载应用程序devise
- Hibernate是一个Android应用程序的矫枉过正?
- 如何通过在Hibernate中使用限制和标准来实现“不在”?
- Hibernate联盟的替代品
- 什么是hibernate中的分离,持久和临时对象?
- javax.transaction.Transactional vs org.springframework.transaction.annotation.Transactional