我正在尝试创建一个 JPQL 查询,从我的 3 个表中获取特定字段:
idCurso,nombCurso,fRegistro,idProfesor,nombProfe,idAula,descripcion
我的实体 JPA:
//表:AULA
@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;
//存储库
public interface CursoRepositorio extends JpaRepository<Curso, String>{}
//服务
@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 cannot be cast to com.unjfsc.rest.model.Curso
我想也许我应该创建一个临时表以使查询更容易,但是如何实现这一点?
最佳答案
您正在尝试转换 List
上Curso
类(class)。
要解决此问题,您应该执行以下操作:
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();
随后,进行适当的映射,并从您的方法返回正确初始化的对象。
关于java - 使用 JPA 连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56369375/