DB中的时间戳和实体中的java.util.Date在加载OpenJPA时会导致舍入问题

DB中的时间戳和实体中的java.util.Date在加载OpenJPA时会导致舍入问题,java,date,db2,jpa-2.0,openjpa,Java,Date,Db2,Jpa 2.0,Openjpa,我正在从数据库加载一个值,它是IBMDB2中的时间戳数据类型,但需要映射为JSF GUI的java.util.Date。我想只要告诉JPA这是一个时间戳,它就会管理它。我是这样做的: @Temporal(TemporalType.TIMESTAMP) @Column(name = "DATE") private Date myTimeStampAsDate; 但是,如果数据库中有日期9999-12-31 23:59:59,则我的实体中的日期将被四舍五入到日期10000-01-01 00:00

我正在从数据库加载一个值,它是IBMDB2中的时间戳数据类型,但需要映射为JSF GUI的java.util.Date。我想只要告诉JPA这是一个时间戳,它就会管理它。我是这样做的:

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DATE")
private Date myTimeStampAsDate;
但是,如果数据库中有日期9999-12-31 23:59:59,则我的实体中的日期将被四舍五入到日期10000-01-01 00:00


如果我将它映射为真正的java.sql.Timestamp,它甚至可以完美地加载毫秒。我需要做什么来避免这种“舍入行为”,但保留实体和GUI的java.util.Date?

Openjpa将提供一个数据字典选项,不舍入带有
@Temporal(TemporalType.TIMESTAMP)注释的
java.util.Date
属性的毫秒数。
. 希望它将与2.2.1/2.3.X版一起发布,并且正在进行中。请关注Jira问题,看看何时能完全解决:

persistence.xml中,该属性看起来像这样(默认值为
true
):


默认值为
true

Openjpa将提供一个数据字典选项,以不将
java.util.Date
属性的毫秒舍入为
@Temporal(TemporalType.TIMESTAMP)
. 希望它将与2.2.1/2.3.X版一起发布,并且正在进行中。请关注Jira问题,看看何时能完全解决:

persistence.xml中,该属性看起来像这样(默认值为
true
):


默认值为
true

,可能是某种wierd隐式行为。如果您的实体使用
java.sql.Timestamp
,并且JSF页面通过调用
Timestamp.getTime()
(它吐出毫秒)来创建一个新的
Date
,会发生什么。或者,您可以格式化时间戳吗?我将尝试让JSF创建一个新的日期,但是这个解决方案意味着我需要操纵setter,这不是一个好的选择。这个问题不仅仅是格式问题。我调试了它,并在一个独立的JUnit测试中确认了它的行为:它正在加载这个舍入,所以它是一个不同的值!谢谢你的建议。我将通过GUI让您知道它在新日期的行为哦,等等,您的JSF是否运行在与实体不同的JVM上?“闰秒”一词可能在不同/不同版本的JVM上实现,也可能不实现。@X-Zero我创建了两个简单的JUnit测试项目,带时间戳的日期在Hibernate 4.0.1中可以正确使用!我会进一步调查,如果有关于这个问题的任何消息,我会告诉你,这可能是某种奇怪的隐含行为。如果您的实体使用
java.sql.Timestamp
,并且JSF页面通过调用
Timestamp.getTime()
(它吐出毫秒)来创建一个新的
Date
,会发生什么。或者,您可以格式化时间戳吗?我将尝试让JSF创建一个新的日期,但是这个解决方案意味着我需要操纵setter,这不是一个好的选择。这个问题不仅仅是格式问题。我调试了它,并在一个独立的JUnit测试中确认了它的行为:它正在加载这个舍入,所以它是一个不同的值!谢谢你的建议。我将通过GUI让您知道它在新日期的行为哦,等等,您的JSF是否运行在与实体不同的JVM上?“闰秒”一词可能在不同/不同版本的JVM上实现,也可能不实现。@X-Zero我创建了两个简单的JUnit测试项目,带时间戳的日期在Hibernate 4.0.1中可以正确使用!如果有关于这个问题的任何消息,我会进一步调查并向您提供