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条件作为其隐式条件。我的错误。是的,帐户在用户类上有关系。但是我认为查询是错误的。是的,帐户在用户类上有关系。但我认为这个问题是错误的。