我有一个PostgreSQL 9.3.6数据库定义以下查询:JPA休眠PostgreSQL的CURRENT_DATE不起作用
CREATE OR REPLACE VIEW calls_today AS
SELECT
cc.*
FROM
call_config cc
WHERE
cc.created_at >= current_date;
的视图用于与游戏框架+开发的门户网站通过JPA 2 Hibernate的。除了日期相关的查询之外,一切似乎都正常。
如果服务器今天重新启动,该视图看起来像工作,但只有今天。明天,我会在网页上看到过去两天的所有电话。第二天,另外一天,三天等等。 如果我在psql客户端上发出查询,结果都很好,只是当天。
我必须缺少一些东西,它看起来不像查询结果被缓存(每天结果增长),而是current_date在服务器重新启动的那一天被修复。就像某种准备好的陈述一样,我真的不知道。
的数据从数据库具有以下JPA的2 API拉:
prepare mystmt as select current_time;
不会受到这个问题:
private static<T extends IOutgoingCallConfig> Result getCalls(Class<T> entityClass) {
Check.Argument.isNotNull(entityClass, "entityClass");
List<CallItem> calls = new ArrayList<>();
EntityManager em = JPA.em();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<T> cq = cb.createQuery(entityClass);
Root<T> rootEntry = cq.from(entityClass);
CriteriaQuery<T> all = cq.select(rootEntry);
TypedQuery<T> allQuery = em.createQuery(all);
for(T entity: allQuery.getResultList()) {
calls.add(new CallItem(entity));
}
return jsonSuccess(calls);
}
我已经通过PSQL下列准备好的查询测试。每个执行揭示了更新当前服务器时间:
execute mystmt;
有一个简单的观点象下面这样:
CREATE OR REPLACE VIEW my_current_time as select current_time;
导致同样的问题。一个查询已运行,返回值始终是相同的:(
这可能涉及到CURRENT_TIME CURRENT_DATE和 的定义从PostgreSQL 9.4 documentation:
由于这些函数返回的开始时间在交易过程中,它们的值不会改变,这被认为是一个特征:意图是允许单个交易具有“当前”时间的一致概念,以便在同一交易中的多个修改承担相同的时间戳
首先,请回答问题 - 查询(TABLE calls_today)是否每天输出变化?如果是的话,这是休眠/ JPA问题,如果不是 - postgres。 – Eugene
刚刚在我的postgresql 9.4安装中测试了my_current_time视图。当从pgAdmin查询视图时,视图中的值按预期进行更新。所以它似乎是休眠方面的一个问题。可能缓存,所以尝试切换。您可能还可以记录所有查询,然后您可以看到它是否实际查询视图。 – Eelke
是的,视图运行良好。只有今天的电话才会被退回。 – aguyngueran