2017-05-17 28 views
0

我已经创建了一个SQL查询,我想要重写为JPQL。下面有一个SQL查询和我的JPQL的例子。我需要通知您,在SQL查询中,我使用了名为wash_admin的函数表,它未映射到Java类中。 SQL查询:如何正确重写JPQL的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: 

但该主题在主questoion是如何重写它正确地得到结果相同,因为它是在SQL查询?

回答

0

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