将日期时间转换为JPQL中的长时间戳

时间:2013-01-02 08:25:41

标签: jpa openjpa

我有一个有两列的实体:

// time when the event happened (stored in UTC)
@Temporal(TemporalType.TIMESTAMP)
private Date eventTime;

// timezone offset in milliseconds
// so local millis are eventTime.getTime() + offset
@Basic
private int offset;

似乎在JPQL查询中I can't use something就像WHERE eventTime + offset > :parameter一样。但是可以通过某种方式将eventTime转换为长期来解决这个问题吗?当然,可以选择使用本机查询...

编辑: 它在标准中不受支持,OpenJPA文档中没有提及,因此目前可能无法实现。

2 个答案:

答案 0 :(得分:1)

您可能无法修改表,但是您是否可以添加另一列,即带偏移的计算时间戳?然后只是根据你的所有疑问?它也可能会产生更好的性能。

我解决这类问题的另一种方法是创建一个SQL视图,并根据该视图创建一个不同的@Entity。当我需要大量复杂的计算并且不希望代码本身具有所有这些复杂性时,我已经这样做了。当您有其他想要获取相同信息的非基于JPA的应用程序(例如报告引擎)时,这非常有用。虽然此解决方案最终使用SQL视图,但它允许您的Java / JPA代码不必处理本机查询。

答案 1 :(得分:0)

我之前在类似情况下所做的是将setter / getters声明为private或protected,然后让公共@Transient getter执行所需的计算。

这解决了所有程序问题。对于所需的jpa sql,您需要在查询中执行适当的计算。