Estou automatizando uma biblioteca, mas estou tendo problemas na hora de puxar os dados do BD de Aluguel. Vou colocar o código:
Classe Aluguel:
@Entity
public class Aluguel {
@Id
@GeneratedValue
private long registro;
@OneToOne
@JoinColumn(name = “idLivro”)
private Livro idLivro;
@OneToOne
@JoinColumn(name = “idPessoa”)
private Pessoa idPessoa;
@Temporal(TemporalType.DATE)
private Date diaDoAluguel;
@Column(length = 10, nullable = true)
private boolean status;
public long getRegistro() {
return registro;
}
public void setRegistro(long registro) {
this.registro = registro;
}
public Livro getLivro() {
return this.idLivro;
}
public void setLivro(Livro Livro) {
this.idLivro = Livro;
}
public Pessoa getIdPessoa() {
return this.idPessoa;
}
public void setIdPessoa(Pessoa idPessoa) {
this.idPessoa = idPessoa;
}
public Date getDiaDoAluguel() {
return diaDoAluguel;
}
public void setDiaDoAluguel(Date diaDoAluguel) {
this.diaDoAluguel = diaDoAluguel;
}
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
@Override
public String toString() {
if (status == true) {
return "Status: Pendente," + " Aluguel{ " + "registro=" + registro + ", tituloLivro=" + idLivro.getTitulo() + ", Alugado por =" + idPessoa.getNome() + ", diaDoAluguel=" + diaDoAluguel + '}';
} else {
return "Status: Devolvido," +" Aluguel{ " + "registro=" + registro + ", tituloLivro=" + idLivro.getTitulo() +", Alugado por =" + idPessoa.getNome() + ", diaDoAluguel=" + diaDoAluguel + '}';
}
}
}
Classe DAO:
public class AluguelDao {
EntityManager em;
Query query;
public void alugarLivro(Aluguel alugar) {
try {
em = PersistenceUtil.createEntityManager();
em.getTransaction().begin();
em.persist(alugar);
em.getTransaction().commit();
System.out.println("Aluguel efetuado com sucesso");
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
PersistenceUtil.closeEntityManagerFactory();
}
}
public List<Aluguel> listarAlugueis() throws Exception {
try {
em = PersistenceUtil.createEntityManager();
em.getTransaction().begin();
query = em.createQuery("SELECT alugar FROM Aluguel alugar");
return query.getResultList();
} catch (Exception e) {
e.printStackTrace();
throw new Exception("Lista Vazia");
} finally {
PersistenceUtil.closeEntityManagerFactory();
}
}
public Aluguel pesquisarAluguel(long registro) throws Exception {
try {
em = PersistenceUtil.createEntityManager();
em.getTransaction().begin();
query = em.createQuery("SELECT alugar FROM Aluguel alugar WHERE alugar.registro = :registro");
query.setParameter("registro", registro);
return (Aluguel) query.getSingleResult();
} catch (NoResultException nre) {
return null;
} finally {
PersistenceUtil.closeEntityManagerFactory();
}
}
public void DevolverLivro(Aluguel alugar) throws Exception {
try {
em = PersistenceUtil.createEntityManager();
em.getTransaction().begin();
alugar = em.merge(alugar);
em.getTransaction().commit();
System.out.println("Livro Devolvido");
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
throw new Exception("Falha ao realisar a função");
}finally{
PersistenceUtil.closeEntityManagerFactory();
}
}
}
e os metodos que chamam o DAO:
case “2”:
try {
for (Aluguel perc : facadeAlugar.facadeListarAluguel()) {
System.out.println(perc);
}
} catch (Exception e) {
System.err.println(“Falha ao realizar a operação”);
}
break;
case "3":
try {
System.out.println("Informe o registro do aluguel");
System.out.println(alugar = facadeAlugar.facadePesquisarAluguel(conversor.StringParaLong(read.readLine())));
alugar.setStatus(false);
livro = alugar.getLivro();
livro.setCopias(livro.getCopias() + 1);
fldao.facadeAtualizarLivro(livro);
facadeAlugar.facadeDevolverLivro(alugar);
} catch (Exception e) {
System.out.println("Falha ao realizar a operação");
}
break;
Quando tento listar os Alugueis é exibido o seguinte erro:
{
mai 07, 2020 2:41:41 PM org.hibernate.event.internal.DefaultLoadEventListener onLoad
INFO: HHH000327: Error performing load command : org.hibernate.exception.SQLGrammarException: could not extract ResultSet
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:458)
at br.com.gemeos.escolacomtdd.dao.AluguelDao.listarAlugueis(AluguelDao.java:49)
at br.com.gemeos.escolacomtdd.facade.FacadeAluguel.facadeListarAluguel(FacadeAluguel.java:33)
at br.com.gemeos.escolacomtdd.util.CrudAluguel.AluguelEmExecução(CrudAluguel.java:85)
at br.com.gemeos.escolacomtdd.main.Main.main(Main.java:61)
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
}
E quando tento pesquisar um Aluguel ou devolver um livro é exibido a mensagem de erro:
{
mai 07, 2020 2:43:47 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: 42883
mai 07, 2020 2:43:47 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ERROR: operator does not exist: character varying = bigint
Dica: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Posição: 908
mai 07, 2020 2:43:47 PM org.hibernate.event.internal.DefaultLoadEventListener onLoad
INFO: HHH000327: Error performing load command : org.hibernate.exception.SQLGrammarException: could not extract ResultSet.
}
Já olhei em todos os lugares e não achei nada que pude-se me ajudar. Se algum puder me ajudar Agrade muito