我正在使用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?
答案 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());
}