【发布时间】:2022-01-14 15:12:26
【问题描述】:
我有实体 AppVisit 与 ManytoOne 与 User 实体的关系。 User 实体与 UserDetail 实体有 OneToOne 关系。
我需要让所有用户在特定日期的访问次数少于他们的maxDailyVisits
以下是类
public class AppVisit{
@ManyToOne(fetch = FetchType.LAZY)
private User user;
private LocalDate visitDate;
}
public class UserDetail{
private Long id;
private int maxDailyVisits;
@OneToOne
private User user;
}
public class User {
private Long id;
@OneToMany(mappedBy = "user")
private List<AppVisit> appVisits;
@OneToOne(mappedBy = "user")
private UserDetail userDetail;
}
这里是我尝试在存储库中使用的 HQL 查询
select ud from UserDetail as ud where u.id in
(select ud1.id from UserDetail as ud1
left join ud1.user.appVisits as av
with acav.visitDate=:visitDate or acav.visitDate is null
Group by u1.id having Count(ud1.id) < ud1.maxDailyVisits)
在执行时,我对数据库执行了以下 SQL 查询:
select * from "UserDetail" ud
cross join "User" u where ud."User_Id"=u."Id"
and (ud."Id" in
(select ud1."Id" from "UserDetail" ud1
left outer join "User" u1 on ud1."User_Id"=u1."Id"
and (av."VisitDate"=? or av."VisitDate" is null)
left outer join "AppVisit" av
on u1."Id"=av."User_Id"
group by ud1."Id"
having count(ud1."Id")<ud1."MaxDailyVisits"))
我也收到了这个错误:
missing FROM-clause entry for table "av"
因为VisitDate 列上的条件放在AppVisit 表上的联接之前
这个问题有什么解决办法吗?
【问题讨论】:
标签: postgresql spring-boot hibernate hql