繁体   English   中英

如何将SQL查询转换为HQL

[英]how do i convert SQL query to HQL

public class EmployeeUserMap {

    @ManyToOne
    @JoinColumn(name = "EMPLOYEEID", unique = true)
    protected Employee employee;

    @ManyToOne
    @JoinColumn(name="USERID")
    private User user;
}

public class RoleUserMap  {


    @ManyToOne
    @JoinColumn(name = "ROLEID")
    private Role role;


    @ManyToOne
    @JoinColumn(name = "USERID")
    private User user;


}

以下是我的SQL查询。

select e.id ,e.firstname from employee_user_map o
          left join role_user_map ru on ru.userid = o.userid
          left join employee e on e.id = o.employeeid
          where  ru.roleid =  (select r.id from role r  where r.code='Role_Merchant')

我尝试过的HQL查询。

 SELECT new com.erp.core.repository.value.LookupValue(o.id,o.firstName,o.firstName) FROM EmployeeUserMap o
            LEFT JOIN o.user =
            WHERE /*@{SYSTEM_CRITERIA}*/1=1 AND (UPPER(o.firstName) LIKE UPPER(CONCAT('%',:searchParam,'%')))

假设您的映射正确,则应将hql查询形成为:

Hibernate版本<5.1.0:

  select new   com.erp.core.repository.value.LookupValue(e.id,e.firstName) 
      from EmployeeUserMap eu
         , RoleUserMap ru
         , Employee e
         , User u
         , Role r
      where  r.code ='Role_Merchant'
          and eu.user = u
          and ru.user = u
          and ru.role =r
          and eu.employee = e 

不要以为您真的需要这里的子查询。

更新 :对于HIbernate的5.1.0+版本,可以使用不相关的实体联接,因此在您的情况下:

  select new com.erp.core.repository.value.LookupValue(e.id,e.firstName) 
  from EmployeeUserMap o
    left join o.user u
    left join o.employee e
    left join RoleUserMap ru on ru.user.id = u.id
    left join ru.role r
  where  r.code ='Role_Merchant'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM