Entitymanager在内部联接的2个不同表中查询

时间:2013-02-13 08:36:58

标签: java jpa

我目前的代码:

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实体没有只有User实体拥有的getName()。

*更新

这是错误

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

2 个答案:

答案 0 :(得分:1)

This文章说明你必须像这样加入:你指定由昏迷分隔的表名,然后移动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();

答案 1 :(得分:0)

试试这个。

result.getUser().getName();

但是,假设您的Account类与User类有关系。

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