Pessoal, nao consigo realizar uma consulta usando jpa de um relacionamento N:N, poderiam me auxiliar?
Banco postgresql uso do toplink
desde ja agradeço
Pessoal, nao consigo realizar uma consulta usando jpa de um relacionamento N:N, poderiam me auxiliar?
Banco postgresql uso do toplink
desde ja agradeço
O que já fez? Como estão suas entidades?
rapha, segue a tentativa, não consegui fazer com que ele traga apenas o teste 1
TestesDAO
public static List recuperaTestes(Aluno alu) {
List<Testes> meustestes = new ArrayList<>();
if(alu!=null ){
conectar();
meustestes = em.createQuery("select DISTINCT t from Testes as t join t.testesalunos as ta join ta.aluno as a where t.situacao ='ABERTO' and ( a.alNome <>"+alu.getAlNome() + ")" ).getResultList();
desconectar();
}
return meustestes;
}
Seguem o mapeamento nas classes:
public class Testes implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "t_id")
@SequenceGenerator(name="Meus_Testes_Generator", sequenceName="meus_testes_sequence", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Meus_Testes_Generator")
private BigInteger tId;
private Date data;
@Column(name = "data")
@Column(name = "situacao")
private String situacao;
@OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "meutesteId")
private Collection<TestesAluno> testesalunos = new ArrayList<TestesAluno>();
//getters and setters…
}
public class TestesAluno implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ta_id")
@SequenceGenerator(name="Meus_Testes_Aluno_Generator", sequenceName="meus_testes_Aluno_sequence", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Meus_Testes_Aluno_Generator")
private BigInteger taId;
...atributos...
@JoinColumn(name = "t_id", referencedColumnName = "t_id" , nullable= false)
@ManyToOne(optional = false)
private Testes meutesteId;
@JoinColumn(name = "al_id", referencedColumnName = "al_id" , nullable= false)
@ManyToOne(optional = false)
private Alunos aluno;
//getters and setters…
}
public class Aluno implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "al_id")
@SequenceGenerator(name="Meus_Alunos_Generator", sequenceName="meus_alunos_sequence", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Meus_Alunos_Generator")
private BigInteger alId;
private String alNome;
@Column(name = "nome")
@OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "aluno")
private Collection<TestesAluno> testesalunos = new ArrayList<TestesAluno>();
//getters and setters…
}
Tenta essas duas opções de jpql
select c from TestesAluno c where c.aluno.alId = ?1 // encontra todos os testes de um aluno por id
select c from TestesAluno c where c.meutesteId.tId= ?1 // encontra todos os alunos que fizeram um determinado teste