0

我有一个包含两列的实体:

// 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 查询中我不能使用类似WHERE eventTime + offset > :parameter. 但是是否可以通过eventTime某种方式转换为 long 来解决?当然,也可以选择使用本机查询...

编辑:标准不支持它,OpenJPA 文档中也没有提到它,所以目前可能不可能。

4

2 回答 2

1

您可能无法修改表,但您是否可以只添加另一列,即计算出的带有偏移量的时间戳?然后将所有查询都以此为基础?它也可能会产生更好的性能。

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

于 2013-01-10T21:51:07.043 回答
0

我之前在类似情况下所做的是将 setter/getter 声明为私有或受保护,然后让 public @Transient getter 执行所需的计算。

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

于 2013-01-10T16:59:02.467 回答