【问题标题】:How to rewrite SQL query to JPQL properly如何正确将 SQL 查询重写为 JPQL
【发布时间】:2023-03-26 03:26:01
【问题描述】:

我创建了一个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查询相同的结果?

【问题讨论】:

    标签: sql spring-data spring-data-jpa jpql


    【解决方案1】:

    我自己找到了解决方案。我失败的原因是错误的导入。重要的是采取import org.springframework.data.repository.query.Param;

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 2018-10-29
      • 1970-01-01
      • 2013-01-17
      • 2011-09-29
      • 1970-01-01
      • 2021-10-09
      • 2011-06-12
      • 2014-11-26
      相关资源
      最近更新 更多