使用FK作为过滤器在Java上创建查询

时间:2017-05-27 23:31:58

标签: java postgresql jpa jpql

我有一个名为Curso的班级和一个名为Disciplina的班级。

Disciplina来自Curso的{​​strong> FK ,名为id_curso。我想使用Disciplina的ID作为契约来过滤Curso

public List<Disciplina> listarDisciplinaPorCurso(Long curso) {
    String jpql = "select u from Disciplina u where u.curso =:id_curso";
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProjetoIntegradorPU");
    EntityManager em = emf.createEntityManager();
    List<Disciplina> resultado = em.createQuery(jpql, Disciplina.class).setParameter("id_curso", curso).getResultList();
    if (resultado == null || resultado.isEmpty()) {
        return null;
    }
    return resultado;
}

但每次我运行时都会收到此错误:

  

线程中的异常&#34; AWT-EventQueue-0&#34; java.lang.IllegalArgumentException:您试图为参数id_curso设置类型类java.lang.Long的值,具有预期类型类br.udesc.model.entidade.Curso来自查询字符串select u from Disciplina u其中u.curso =:id_curso

1 个答案:

答案 0 :(得分:0)

正如例外情况所示,当您的查询期待该实体时,您正试图将Curso设置为Long

将您的查询字符串更改为:u.curso.[cursoId] =,它应该可以正常工作