2011-04-20 70 views
2

我使用Oracle 11g和JPA 2.0(JBoss 6.0.0中的休眠)。 我需要,代表了一个实体的时间范围,所以我所定义的那些字段:JPA 2.0和Oracle与TemporalType.TIME

@Temporal(TemporalType.TIME) 
private Date startTime; 

@Temporal(TemporalType.TIME) 
private Date endTime; 

所生成的表使用两个日期字段,这是确定自从Oracle没有表示只是在部分时间一类型。

从db中加载实体时,只加载时间部分(该字段包含java.sql.Time)。 我已经看到,如果我在字段中设置完整的日期+时间,日期部分将被持久化到数据库。

有没有办法确保日期部分不会持久保存到分贝?

回答

2

您可以编写删除日期组件的setter方法。快速和肮脏的例子:

public void setStartTime(Date startTime) 
{ 
    this.startTime = new Time(startTime.getTime() % 86400000L); 
} 

虽然你会更好使用Joda Time做你的日期/时间计算(见this question)。我没有测试是为了确保它是正确的,但它应该告诉你的基本思路:

public void setStartTime(Date startTime) 
{ 
    this.startTime = new Time(LocalTime.fromDateFields(startTime).millisOfDay().get()); 
} 
+1

谢谢,我用您的解决方案(但使用日历剥离的日期部分,以避免对乔达的依赖时间,此刻)。我想知道是否有办法告诉JPA照顾这部分或类似的东西。 – 2011-04-20 15:53:34