我在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。