嘿,我创建了一个@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)中的一个字段,将其弄乱了,我能以某种方式逃脱它吗?
答案 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