@Formula批注错误,使用+间隔时“模式不存在”

时间:2019-11-13 10:31:50

标签: sql postgresql spring-data-jpa

嘿,我创建了一个@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_,

似乎认为“间隔”是我的实体(MonthlyServiceGroupService)中的一个字段,将其弄乱了,我能以某种方式逃脱它吗?

2 个答案:

答案 0 :(得分:1)

这似乎是您的框架有问题。 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框架中可能还有其他方法可以“关闭”此行为-类似于运行原始查询。但是以上所述应该使间隔对于您正在使用的功能安全。

答案 1 :(得分:0)

我最终使用了它,并且对我有用。

http://localhost