Присоединяйтесь к столам с JPA - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь создать 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

Я думаю, может быть, мне следует создать временную таблицу, чтобы упростить запрос, но как мне этого добиться?

1 Ответ

0 голосов
/ 30 мая 2019

Вы пытаетесь разыграть List в Curso классе.Чтобы устранить эту проблему, вы должны сделать следующее:

List<Object[]> results = 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();

И затем выполнить соответствующее сопоставление и вернуть правильно инициализированный объект из вашего метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...