JPA:与3个表连接时出错

时间:2016-08-29 13:59:45

标签: mysql spring jpa

我在这里收到错误:

@Query("SELECT p.id,"
+ " p.data,"
+ " p.protocolo,"
+ " p.status,"
+ " d.nome,"
+ " u.nome"
+ " FROM Protocolo p"
+ " INNER JOIN Documento d ON "
+ " p.documento_id = d.id "
+ " INNER JOIN Usuario u ON "
+ " p.academico_id = u.id)")
public List<Protocolo> findByProtocolosJoin();    

以下是日志文件的链接: Log file

2 个答案:

答案 0 :(得分:0)

JPQL允许您通过关系 JOIN。您似乎试图JOIN到另一个根。这不是标准JPQL的一部分,虽然有些JPA提供商(例如DataNucleus)可能允许它 - 但是消息表明你的(Hibernate)并不适用于你的版本#{1}} 39;重新使用。任何JPQL教程都会向您显示how to join across relations,因为您不会打扰发布实体(此类加入将基于此),这就是所有可以说的。

答案 1 :(得分:0)

使用JOIN运算符的内部联接的语法是[INNER] JOIN [AS]。

考虑以下查询: SELECT p 来自员工e JOIN e.phones p

此查询使用JOIN运算符通过电话关系将Employee实体加入Phone实体。 此查询中的连接条件由电话关系的对象关系映射定义。

JPQL请求的SQL等价物是:

SELECT p.id,p.phone_num,p.type,p.emp_id 从emp e,电话p WHERE e.id = p.emp_id

尝试此请求:

SELECT p.id,p.data,p.protocolo,p.status,d.nome,u.nome FROM Protocolo p JOIN p.Documento d JOIN p.Documento.Usuario u

通过结果和好运告诉我们