JPA 2.0和Oracle与TemporalType.TIME

时间:2011-04-20 14:37:12

标签: oracle datetime jpa jpa-2.0

我正在使用Oracle 11g和JPA 2.0(JBoss 6.0.0中的hibernate)。 我需要在实体中表示时间范围,因此我定义了这些字段:

@Temporal(TemporalType.TIME)
private Date startTime;

@Temporal(TemporalType.TIME)
private Date endTime;

生成的表使用两个DATE字段,这是可以的,因为Oracle没有只表示时间部分的类型。

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

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

1 个答案:

答案 0 :(得分: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());
}