Java JPQL和带有时区的时间戳

Java JPQL和带有时区的时间戳,java,jpa,jpql,Java,Jpa,Jpql,我的一个JPA实体中有以下字段定义: @Column(nullable = false, name = "start_time", columnDefinition= "TIMESTAMP WITH TIME ZONE") @Temporal(javax.persistence.TemporalType.TIMESTAMP) private Date startTime = new Date(); @Column(nullable = true, name = "end_time", colu

我的一个JPA实体中有以下字段定义:

@Column(nullable = false, name = "start_time",
columnDefinition= "TIMESTAMP WITH TIME ZONE")
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date startTime = new Date();

@Column(nullable = true, name = "end_time",
columnDefinition= "TIMESTAMP WITH TIME ZONE")
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date endTime = null;
数据库是PostgreSQL,不使用不带时区的时间戳。有关时区的插入和更新进展顺利。当我尝试对一些测试数据运行selectjpql查询,并且过滤器参数是日期对象时,至少我认为会出现一个问题。OpenJPA生成的查询在参数中不包含时区。
有谁能给我一些关于JPA和带有时区列的时间戳的指导吗?

你可以看看java.util.Calendar。

当JPA实体存储在数据库中时,我会避免在JPA实体中使用日期和日历。标准JDBC时态值没有时间戳的概念

我使用下面的样式

private Long effectiveDate;
public Date getEffectiveDate() {
  if (effectiveDate == null) { return null; }
  return new Date(effectiveDate);
}
public void setEffectiveDate(Date d) {
  if (d == null) { effectiveDate = null; }
  effectiveDate = d.getTime();
}
实际上,存储在数据库中的数据是一个简单的长值。但是,在应用层上,您仍然使用具有时区概念的日期对象

现在,有时您仍然希望将日期存储在数据库级别,以便进行查询。在这种情况下,您可以执行以下操作

private Long effectiveDate;
private Date effectiveDateDate;
public Date getEffectiveDate() {
  if (effectiveDate == null) { return null; }
  return new Date(effectiveDate);
}
public void setEffectiveDate(Date d) {
  effectiveDateDate = d;
  if (d == null) { effectiveDate = null; }
  effectiveDate = d.getTime();
}