Я пытаюсь создать JPQL-запрос, который получает определенные поля из моих 3 таблиц:
idCurso, nombCurso, fRegistro, idProfesor, nombProfe, idAula, Descripcion
Мои сущности JPA:
// ТАБЛИЦА: АУЛА
@Entity
@Table(name="aulas")
public class Aula implements Serializable{
private static final long serialVersionUID = 1L;
@Id
private String id;
private String descripcion;
@Temporal(TemporalType.DATE)
private Date fRegistro;
private Integer estado;
@OneToMany(mappedBy = "aula",cascade = {CascadeType.ALL})
private List<Curso> curso;
// ТАБЛИЦА: ПРОФЕСОР
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name="profesores")
public class Profesor implements Serializable{
private static final long serialVersionUID = 1L;
@Id
private String id;
private String nombProfe;
@Temporal(TemporalType.DATE)
private Date f_nacimiento;
private Integer estado;
@OneToMany(mappedBy = "profesor", cascade = {CascadeType.ALL})
private List<Curso> curso;
// ТАБЛИЦА: КУРСО
@Entity
@Table(name="cursos")
public class Curso implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "profesor_id")
@JsonIgnore
private Profesor profesor;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "aula_id")
@JsonIgnore
private Aula aula;
private String nomCurso;
@Temporal(TemporalType.DATE)
private Date fRegistro;
// REPOSITOY
public interface CursoRepositorio extends JpaRepository<Curso, String>{}
// SERVICE
@Autowired
CursoRepositorio cursoRepositorio;
@PersistenceContext
private EntityManager em;
public Curso buscarById(String id)
{
return (Curso) em.createQuery("SELECT c.id,c.nomCurso,c.fRegistro,a.id,a.descripcion,p.id,p.nombProfe FROM Curso c JOIN c.aula a JOIN c.profesor p WHERE c.id= :p1")
.setParameter("p1", id)
.getResultList();
}
// CONTROLLER
@GetMapping("/curso/{id}")
public Curso CursoById(@PathVariable("id") String id) {
return cursoServicio.buscarById(id);
}
Я пытался с этим запросом:
SELECT c.id,c.nomCurso,c.fRegistro,a.id,a.descripcion,p.id,p.nombProfe FROM Curso c JOIN c.aula a JOIN c.profesor p WHERE c.id= :p1
ошибка (SoapUI):
java.util.ArrayList не может быть приведен к com.unjfsc.rest.model.Curso
Я думаю, может быть, мне следует создать временную таблицу, чтобы упростить запрос, но как мне этого добиться?