具有内部联接的两个不同表中的Entitymanager查询



我的当前代码:

TypedQuery<Account> tp = em.createQuery("SELECT a FROM Account a INNER JOIN User u ON u.account_id = a.id WHERE a.email = :email AND a.pwd = :pwd AND a.role = 'admin'", Account.class);
                tp.setParameter("email", this.username);
                tp.setParameter("pwd", this.password);
                Account result = tp.getSingleResult();

但是会得到java.lang.IollegalArgumentException.

我需要的是在用户表中显示一列。

类似于String name = Account.getName();,但是Account实体没有getName(),只有User实体有。

*更新

这是错误

java.lang.IllegalArgumentException:在EntityManager中创建查询时发生异常:异常描述:分析查询时语法错误[SELECT a FROM Account a INNER JOIN User u ON u.Account_id=a.id WHERE a.email=:emailAND a.pwd=:pwd AND a.role='admin']。内部异常:org.eclipse.persistence.Internal.libraries.antlr.runtime.EarlyExitException

本文解释了必须这样JOIN:指定用昏迷分隔的表名,并在WHERE中移动ON条件。

TypedQuery<Account> tp = em.createQuery("SELECT a FROM Account a, User u   WHERE u.account_id = a.id AND a.email = :email AND a.pwd = :pwd AND a.role = 'admin'", Account.class);
            tp.setParameter("email", this.username);
            tp.setParameter("pwd", this.password);
            Account result = tp.getSingleResult();

试试这个。

result.getUser().getName();

不过,这是在假设Account类与User类有关系的情况下进行的。

这是Hibernate/JPA关系的假设来自您之前的问题以及在上面的代码中使用HQL

最新更新