有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

类似于String name = Account.getName();但帐户实体没有getName(),只有用户实体有

*更新

这就是错误所在

爪哇。lang.IllegalArgumentException:在EntityManager中创建查询时发生异常:异常描述:语法错误分析查询[从u.Account上的内部加入用户u中选择一个帐户\u id=a.id,其中a.email=:email和a.pwd=:pwd和a.role='admin']。内部异常:org。日食坚持不懈内部的图书馆。antlr。运行时。早期退出例外


共 (2) 个答案

  1. # 1 楼答案

    试试这个

    result.getUser().getName();

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

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

  2. # 2 楼答案

    This这篇文章解释了必须这样连接:指定由coma分隔的表名,然后在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();