我创建了一个SQL
查询,我想将其重写为JPQL
。下面是一个SQL
查询和我的JPQL
示例。我需要通知您,SQL
查询中,我使用名为 wash_admin
的函数表,该表未映射到类Java
。 SQL
查询:
select ww.wash_id, ww.name, ww.washlocation_wash from test3.user us
join test3.admin ad on us.user_id = ad.user_id
join test3.wash_admin wa on wa.admin_id = ad.admin_id
join test3.wash ww on ww.wash_id = wa.wash_id
where 1=1
and us.login = 'ADMIN11';
我的JPQL
:
@Query(value = "select w from Wash w left join w.washAdmins wa left join wa.userId us where us.login = :login")
List<Wash> getWashByLogin(@Param("login") String login);
Wash
:
public class Wash {
private Integer washId;
private String name;
private WashLocation washLocation;
private List<Worker> washWorker;
private List<Reservation> washReservation;
private List<WashWashType> washTypes;
private List<Admin> washAdmins;
User
:
public class User {
private Integer userId;
private String login;
private String passwordHash;
private Role userRole; // admin, worker, client
private Client userClient;
private Worker userWorker;
private List<File> file;
private Admin userAdmin;
Admin
:
public class Admin {
private Integer adminId;
private User userId;
private List<Wash> washId;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "wash_admin", joinColumns = {
@JoinColumn(name = "adminId") },
inverseJoinColumns = { @JoinColumn(name = "washId") })
public List<Wash> getWashId() {
return washId;
}
不幸的是,当我运行此query
时,我遇到了异常:
Name for parameter binding must not be null or empty! For named parameters you need to use @Param for query method parameters on Java versions < 8.; nested exception is java.lang.IllegalArgumentException:
但是该主题中的主要任务是如何正确重写它以获得与查询中相同的结果SQL
?
我为自己提出了解决方案。我失败的情况是错误的导入。服用import org.springframework.data.repository.query.Param;
很重要