java - 使用 JPA 连接表

标签 java oracle jpa

我正在尝试创建一个 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

我想也许我应该创建一个临时表以使查询更容易,但是如何实现这一点?

最佳答案

您正在尝试转换 ListCurso类(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/

相关文章:

java - for循环未满足?

java - 如何更改 JavaFX 中的 TableView 框架颜色?

甲骨文 - 即时客户端

sql - ORA-01952 : system privileges not granted to 'ROJIB

java - 如何从颜色代码中找到颜色的名称

java - 使用接收 List<Project> 的 Web 服务在 Java 中填充 JTable

oracle - 执行语句后如何检索成功/失败消息?

java - 根据实体列表查找实体

java - 指向 JPA/Hibernate 中同一实体的多个 @ManyToOne 字段

java - JPA 实体映射基于另外两个实体映射相关