Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Entitymanager在两个具有内部联接的不同表中查询_Java_Jpa - Fatal编程技术网

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

Java Entitymanager在两个具有内部联接的不同表中查询,java,jpa,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.usern

我当前的代码:

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();
TypedQuery tp=em.createQuery(“在u.Account_id=a.id上从内部加入用户u中选择一个帐户,其中a.email=:email和a.pwd=:pwd和a.role='admin',Account.class”);
tp.setParameter(“email”,此用户名);
tp.setParameter(“pwd”,此密码);
帐户结果=tp.getSingleResult();
但是我会得到一个java.lang.IllegalArgumentException

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

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

*更新

这就是错误所在

java.lang.IllegalArgumentException:在EntityManager中创建查询时发生异常:异常描述:语法错误分析查询[从u.Account上的内部加入用户u中选择一个帐户\u id=a.id,其中a.email=:email和a.pwd=:pwd和a.role='admin']。内部异常:org.eclipse.persistence.Internal.libraries.antlr.runtime.EarlyExitException

试试这个

result.getUser().getName()

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

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

试试这个

result.getUser().getName()

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

假设这种关系是Hibernate/JPA关系,这是因为您以前在上面的代码中使用了HQL

这篇文章解释了您必须这样加入:您指定了由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();
TypedQuery tp=em.createQuery(“从帐户a、用户u中选择一个,其中u.Account_id=a.id和a.email=:email和a.pwd=:pwd和a.role='admin',Account.class”);
tp.setParameter(“email”,此用户名);
tp.setParameter(“pwd”,此密码);
帐户结果=tp.getSingleResult();
这篇文章解释了您必须这样加入:指定用逗号分隔的表名,然后在
的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();
TypedQuery tp=em.createQuery(“从帐户a、用户u中选择一个,其中u.Account_id=a.id和a.email=:email和a.pwd=:pwd和a.role='admin',Account.class”);
tp.setParameter(“email”,此用户名);
tp.setParameter(“pwd”,此密码);
帐户结果=tp.getSingleResult();

你能发布你的堆栈跟踪吗……这真的是两个问题吗?首先,IllegalArgumentException发生在哪里?java.lang.IllegalArgumentException发生在createQuery上。也许这个查询不正确。我更新了错误的问题尝试:从帐户a内部加入a.user u ON u.Account_id=a.id中选择一个帐户,其中a.email=:email和a.pwd=:pwd和a.role='admin'@galao您可以忽略ON条件作为其隐式条件。我错了。你能发布你的堆栈跟踪吗…这是两个问题吗?首先,IllegalArgumentException发生在哪里?java.lang.IllegalArgumentException发生在createQuery上。也许这个查询不正确。我更新了错误的问题尝试:从帐户a内部加入a.user u ON u.Account_id=a.id中选择一个帐户,其中a.email=:email和a.pwd=:pwd和a.role='admin'@galao您可以忽略ON条件作为其隐式条件。我的错误。是的,帐户在用户类上有关系。但是我认为查询是错误的。是的,帐户在用户类上有关系。但我认为这个问题是错误的。