如何正确地将SQL查询重写为JPQL



我创建了一个SQL查询,我想将其重写为JPQL。下面是一个SQL查询和我的JPQL示例。我需要通知您,SQL查询中,我使用名为 wash_admin 的函数表,该表未映射到类JavaSQL查询:

 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;很重要

最新更新