如何在JPA查询中将DATE和TIME连接起来形成DATETIME (TIMESTAMP)



我在数据库中有两个字段来存储日期和时间。前者的时间部分设置为零,后者的日期部分设置为空(即1970/1/1)。只有上帝知道为什么原来的开发者会这样做,我不能改变表格。在JPA查询中,我需要将Timestamp与这两个字段进行比较,就好像它们是单个DateTime字段一样。在SQL Server中,我会这样做:

select CONVERT(DATETIME, CONVERT(CHAR(10), Date_Field, 121) + ' ' + CONVERT(CHAR(8), Time_Field, 108)) from MyTable

是否有任何方法将JPA查询中的这两个字段连接起来,以便我可以将它们与完整的DateTime进行比较?

为什么不保持这种方式,我的意思是,如果你不能改变结构,然后使用参数分割,你可以弄清楚,如果你使用JPA查询参数:查询

entityManager.createQuery("SELECT o FROM Object o WHERE o.date = :date AND o.time = :time", Object.class)
.setParameter("date", localDateTime.toDate())
.setParameter("time", localDateTime.toTime())
.getResultList();

然后在你的实体中,你只需要一个额外的方法来生成你想要的值当您拥有结果列表时,您可以使用该bean属性访问该值

@Transient //Only necesary if you are declaring the annotations at method level, not if they are in the variable
public DateTime getDateTime() {
    return new DateTime();//Build with the values dateTime and time
}

关于你的约会问题,另一种方法(看起来很可怕,我知道,但它有效)可以是:

SELECT r FROM Registry r Where
(r.date = :startDate AND r.time >= :startTime)
OR (r.date = :finalDate AND r.time <= :finalTime)
OR (r.date > :startDate AND r.date < :endDate)

这个查询的好处是它仍然在db中被过滤,避免在JPA中传输和转换数据

相关内容

  • 没有找到相关文章

最新更新