Estou tento um problema em um projeto que estou fazendo. Estou tentando trazer os dados do banco para uma tabela só que não retorna os dados. Vou deixar o código e o erro abaixo, se alguém poder me ajudar só falar aqui.
@Entity
@Table(name = "conteudos")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "tipo_conteudo", discriminatorType = DiscriminatorType.STRING)
public abstract class Conteudo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "conteudo_id")
private Long id;
@Column(name = "titulo")
private String titulo;
@Column(name = "descricao")
private String descricao;
@Column(name = "diretor")
private String diretor;
@Column(name = "genero")
private String genero;
@Column(name = "data_de_lancamento")
private LocalDate dataDeLancamento;
@Column(name = "url_img")
private String urlImg;
@Column(name = "url_trailer")
private String urlTrailer;
@Column(name = "ativo")
private Boolean ativo;
@Column(name = "tipo_conteudo", insertable = false, updatable = false)
private String tipoConteudo;
@Column(name = "avaliacao_id")
@OneToMany
private List<Avaliacoes> listAvaliacoes;
public Conteudo(String titulo, String descricao, String diretor, String genero, LocalDate dataDeLancamento,
String urlImg, String urlTrailer) {
this.titulo = titulo;
this.descricao = descricao;
this.diretor = diretor;
this.genero = genero;
this.dataDeLancamento = dataDeLancamento;
this.urlImg = urlImg;
this.urlTrailer = urlTrailer;
this.ativo = true;
this.tipoConteudo = definirTipoConteudo();
}
public Conteudo() {}
protected abstract String definirTipoConteudo();
@Entity
@Table(name = "filmes")
@DiscriminatorValue("FILME")
public class Filmes extends Conteudo {
@Column(name = "duracao")
private Integer duracao;
public Filmes(String titulo, String descricao, String diretor, String genero, LocalDate dataDeLancamento,
String urlImg, String urlTrailer, Integer duracao) {
super(titulo, descricao, diretor, genero, dataDeLancamento, urlImg, urlTrailer);
this.duracao = duracao;
}
public Filmes() {}
@Override
protected String definirTipoConteudo() {
return "Filmes";
}
public class ConteudoRepository implements IConteudoRepository {
@Override
public void cadastrar(Conteudo conteudo) throws SQLException {
TransacaoUtil.executarTransacao(maneger -> maneger.persist(conteudo));
}
@Override
public Optional<Conteudo> buscarPeloID(long id) throws SQLException {
return TransacaoUtil.executarTransacaoComRetorno(manager -> {
return Optional.ofNullable(
manager.createQuery("from Conteudo c where c.id = :id and c.ativo = true", Conteudo.class)
.setParameter("id", id).getSingleResult());
});
}
@Override
public List<Conteudo> listarConteudos() throws SQLException {
return TransacaoUtil.executarTransacaoComRetorno(manager -> {
return manager.createQuery("from Conteudo c where c.ativo = true", Conteudo.class).getResultList();
});
}
@Override
public List<Filmes> listarFilmes() throws SQLException {
return TransacaoUtil.executarTransacaoComRetorno(manager -> {
return manager.createQuery("from Filmes f where f.ativo = true", Filmes.class).getResultList();
});
}
@Override
public List<Filmes> listarTop10Filmes() throws SQLException {
return TransacaoUtil.executarTransacaoComRetorno(maneger -> {
return maneger.createQuery("SELECT DISTINCT f FROM Filmes f " +
"JOIN f.listAvaliacoes a " +
"GROUP BY f " +
"ORDER BY AVG(a.classificacao) DESC " +
"LIMIT 10 ", Filmes.class).getResultList();
});
}
@Override
public List<Series> listarSeries() throws SQLException {
return TransacaoUtil.executarTransacaoComRetorno(manager -> {
return manager.createQuery("from Series s where s.ativo = true", Series.class).getResultList();
});
}
@Override
public List<Series> listarTop10Series() throws SQLException {
return TransacaoUtil.executarTransacaoComRetorno(maneger -> {
return maneger.createQuery("SELECT DISTINCT s FROM Series s " +
"JOIN s.listAvaliacoes a " +
"GROUP BY s " +
"ORDER BY AVG(a.classificacao) DESC " +
"LIMIT 10", Series.class).getResultList();
});
}
@Override
public void alterar(Optional<Conteudo> conteudo) throws SQLException {
TransacaoUtil.executarTransacao(maneger -> maneger.merge(conteudo));
}
@Override
public void excluirPeloID(Long id) throws SQLException {
TransacaoUtil.executarTransacao(maneger -> {
Conteudo conteudo = maneger.find(Conteudo.class, id);
conteudo.setAtivo(false);
maneger.merge(conteudo);
});
}
}