1

我当前的代码:

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.IllegalArgumentException。

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

类似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 = :email AND a.pwd = :pwd AND a.role = 'admin']。内部异常:org.eclipse.persistence.internal.libraries.antlr.runtime.EarlyExitException

4

2 回答 2

1

这篇文章解释了你必须像这样加入:你指定用逗号分隔的表名,然后将ON条件移动到WHERE.

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();
于 2015-11-27T10:30:21.800 回答
0

尝试这个。

result.getUser().getName();

不过,这是假设您的 Account 类与 User 类有关系。

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

于 2013-02-13T08:49:01.253 回答