JPA嵌套内连接查询

时间:2018-01-08 06:29:04

标签: java sql jpa

我在usuario和projeto之间有3个表和ManyToMany关系,而且我有一个完美的搜索方式:

usuario
+-------------+-------------+
| idMatricula | nomeUsuario | 
+-------------+-------------+
| 1           | Victor      | 
| 12345       | Juquinha    |
| 2           | Nilton      | 
| 3           | Fatima      | 
| 4           | Bianca      | 
| 4422        | Pedrinho    | 
+-------------+-------------+

projeto
+-----------+----------------+--------------+
| idprojeto | nomeProjeto    | faseProjeto  |
+-----------+----------------+--------------+
|         1 | APS_6_semestre | Em Andamento |
|         2 | APS_7_semestre | Em testes    |
|         3 | APS_8_semestre | Em testes    |
|         4 | TCC            | Concluido    |
+-----------+----------------+--------------+

projeto_has_usuario
+-------------------+---------------------+
| projeto_idprojeto | usuario_idMatricula |
+-------------------+---------------------+
|                 1 | 1                   |
|                 1 | 2                   |
|                 1 | 3                   |
|                 2 | 2                   |
+-------------------+---------------------+

我试图仅查询与用户关联的项目,但我的查询不起作用,我不知道它是语义错误还是注释错误。这是我的映射类:

Projeto:

@Entity
@Table(name="projeto")
public class Projeto {

@GeneratedValue
@Id
@Column(name="idprojeto", nullable = false)
private int idprojeto;

@Column(name="nomeProjeto", nullable = false)
private String nomeProjeto;

@Column(name="faseProjeto", nullable = false)
private String faseProjeto;

@ManyToMany(mappedBy="projetos")
private List<Usuario> usuarios;

Usuario:

@Entity
@Table(name="usuario")
public class Usuario {

@Id
@Column(name="idMatricula", nullable = false)
private String id;

@Column(name="nomeUsuario", nullable = false)
private String nomeUsuario;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="projeto_has_usuario",
joinColumns={@JoinColumn(name="usuario_idMatricula")},
inverseJoinColumns={@JoinColumn(name="projeto_idprojeto")})
private List<Projeto> projetos;

这是我的问题:

TypedQuery<Usuario> listaUsuario = manager.createQuery("SELECT u FROM Usuario as u", Usuario.class);
// Some validation ..
    TypedQuery<Projeto> listaTabela = manager.createQuery("SELECT p FROM projeto p "
    + "JOIN p.usuarios u WHERE p.idprojeto MEMBER OF u.projetos", Projeto.class);

    for (Projeto projetos : listaTabela.getResultList()) {
        System.out.println("Nome: " + projetos.getNomeProjeto() + "\nID: " + projetos.getIdprojeto()
        + "\nFase: " + projetos.getFaseProjeto());

返回我:

Nome: APS_6_semestre
ID: 1
Fase: Em Andamento

我正在使用Eclipse IDE 4.7.2,Hibernate 5.2.12和JPA 2.1。

0 个答案:

没有答案