@Formula注释错误,使用 + 间隔时"schema does not exist"



嘿,我创建了一个@Formula查询,它运行良好,但在添加了带有date_trunc+interval的行后,它就不再运行了。

@Formula("(SELECT SUM(sj.elapsed_time) " +
"FROM shift_job sj JOIN shift_service ss ON sj.shift_service_id = ss.id " +
"WHERE ss.monthly_service_group_service_id = id AND " +
"ss.status = 'scheduled' AND " +
"ss.create_time >= date_trunc('month', CURRENT_DATE) AND " +
"ss.create_time < date_trunc('month', CURRENT_DATE) + interval '1 month' " +
"GROUP BY sj.shift_service_id)")
private Long shiftJobsElapsedTimeThisMonth;

我发现创建的查询显示:

AND ss.create_time < date_trunc('month', CURRENT_DATE) + monthlyser12_.interval '1 month' GROUP BY sj.shift_service_id) as formula1_13_,

似乎它认为"interval"是我的实体(MonthlyServiceGroupService(中的一个字段,这把它搞砸了,我能以某种方式逃脱它吗?

这似乎是您的框架的一个问题。Postgres倾向于依赖interval进行日期运算。但是有一个变通办法。您可以使用以下函数创建间隔:

ss.create_time < date_trunc('month', CURRENT_DATE) + make_interval(months => 1)

或:

ss.create_time < date_trunc('month', CURRENT_DATE) + make_interval(0, 1, 0)

Spring JPA框架中可能还有其他方法可以"关闭"这种行为——比如运行原始查询。但是,以上内容应该使您正在使用的函数的间隔是安全的。

我最终使用了它,它对我有效。

ss.create_time < date_trunc('month', CURRENT_DATE) + (1::text || ' month')::interval

最新更新