java 使用来自两个不同表的用户名和电子邮件登录HQL

3lxsmp7m  于 2023-01-04  发布在  Java
关注(0)|答案(1)|浏览(132)

我有输入用户名和密码来登录我的应用程序的形式。
这是我的疑问:

public LoginUsr logInUsr(RequestLoginUsr request) {
         List<User> l = getCurrentSession()
         .createQuery("from User where name = :username and pass = :password")
         .setParameter("username", request.getUsername())
         .setParameter("password", request.getPassword())
         .getResultList();

      if(l.size() == 1) {
         User u = l.get(0);
         return new LoginUsr(u.getSurname(),u.getId(),u.getFkUsrPrc(), null);
      } else {
         return null;
      }
   }

请求登录用户:

public class RequestLoginUsr {
   private String username;
   private String password;
   private Integer moduleId;
   private Integer computerId;
}

它的工作,但...
现在,我将添加输入name也是来自同一输入上的第二个表"ContactPerson"的email的可能性。
这是代码,但不是工作:

FROM User as usr JOIN ContactPerson ctp on usr.name = :username 
AND usr.pass = :password OR ctp.email = :username

我该怎么做呢?
我需要使用User表中的参数名称或ContactPerson表中的电子邮件登录到我的应用程序。

hgncfbus

hgncfbus1#

请考虑按以下方式重写查询:
但是我假设在ContactPerson类中有一个对User类的引用(作为多对一或简单的外键属性)

FROM User as usr 
WHERE usr.pass = :password
AND (usr.name = :username 
    OR EXISTS
       (SELECT 1 FROM ContactPerson ctp WHERE ctp.email = :username
       AND ctp.user = usr)
)

相关问题