>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



Hibernate - Erro ao rodar o projeto - IllegalStateException: Transaction not active


Meu amigo estou com um problema, eu fiz tudo conforme demonstrado na Video-aula 3, contrui minhas classes Cliente, DAO, ClienteDAO, meu arquivo persistence.xml e meu index.jsp, ja fiz e refiz meu projeto tanto com Mysql quanto PostgreSQL e não FUNCIONA.

OBS: Estou utilizando os jar que baixei do projeto Hibernate-Basico-Fonte.zip

Segue abaixao a imagem do erro e tambem o codigo das minhas classes:


persistence.xml

[XML]



org.hibernate.ejb.HibernatePersistence
MODEL.Cliente















[/XML]

HTML

index.jsp

<%@page import="DAO.ClienteDAO"%>
<%@page import="MODEL.Cliente"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>




Hibernate


<%
Cliente c = new Cliente();

c.setNome("Valdejanio Santos Silva");
c.setEndereco("AVENIDA 34");
c.setNumero("1245");
c.setBairro("Vila Nova");
c.setTelefone("(94)9235-6689");

ClienteDAO dao = new ClienteDAO();

dao.salvar(c);
%>




CLASSES JAVA:

Cliente.java


package MODEL;

import javax.annotation.Generated;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="cliente")
public class Cliente {

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@Column(name="id")
private int id;

@Column(name="nome")
private String nome;

@Column(name="endereco")
private String endereco;

@Column(name="numero")
private String numero;

@Column(name="bairro")
private String bairro;

@Column(name="telefone")
private String telefone;

public Cliente(){
}

/* -- Get e Set -- */
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public String getEndereco() {
return endereco;
}

public void setEndereco(String endereco) {
this.endereco = endereco;
}

public String getNumero() {
return numero;
}

public void setNumero(String numero) {
this.numero = numero;
}

public String getBairro() {
return bairro;
}

public void setBairro(String bairro) {
this.bairro = bairro;
}

public String getTelefone() {
return telefone;
}

public void setTelefone(String telefone) {
this.telefone = telefone;
}
}


ClienteDAO.java

package DAO;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.LogicalExpression;
import org.hibernate.criterion.Restrictions;

import MODEL.Cliente;

public class ClienteDAO extends DAO {

public void salvar(Cliente cliente){
EntityManager em = getEntityManager();

try{
em.getTransaction().begin();
em.persist(cliente);
em.getTransaction().commit();
}catch (Exception e) {
em.getTransaction().rollback();
}
}

public Cliente getById(int idCliente){
EntityManager em = getEntityManager();
return em.find(Cliente.class, idCliente);
}

public void update(Cliente cliente){
EntityManager em = getEntityManager();

try{
em.getTransaction().begin();
Cliente c = em.find(Cliente.class, cliente.getId());
c.setNome(cliente.getNome());
c.setEndereco(cliente.getEndereco());
c.setNumero(cliente.getNumero());
c.setBairro(cliente.getBairro());
c.setTelefone(cliente.getTelefone());
em.getTransaction().commit();
} catch(Exception e){
em.getTransaction().rollback();
}
}

public void delete(Cliente cliente){
EntityManager em = getEntityManager();

try{
em.getTransaction().begin();
Cliente c = em.find(Cliente.class, cliente.getId());
em.remove(c);
em.getTransaction().commit();
} catch(Exception e){
em.getTransaction().rollback();
}
}

public List exibir_by_name(String nome){
EntityManager em = getEntityManager();

Criteria criteria = getSession().createCriteria(Cliente.class);
//criteria.add(Restrictions.eq("nome", "Rafael"));
//criteria.add(Restrictions.like("nome", "%R%"));
//criteria.add(Restrictions.gt("ordem", 0));
//gt() : maior que
//ge() : maior ou igual que
//lt() : menor que
//le() : menor ou igual que
//Criterion cr1 = Restrictions.like("nome", "%R%");
//Criterion cr2 = Restrictions.like("nome", "%T%");

//LogicalExpression exp = Restrictions.or(cr1, cr2);

//criteria.add(exp);

criteria.add(Restrictions.like("nome", "%"+ nome +"%"));

return criteria.list();
}

public List exibir(){
EntityManager em = getEntityManager();

try{
Query q = em.createQuery("select object(c) from Cliente as c");
return q.getResultList();
} finally{
em.close();
}
}
}


DAO.java

package DAO;


import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.hibernate.Session;
import org.hibernate.ejb.EntityManagerImpl;

public class DAO {

private EntityManagerFactory fabCon;

public EntityManager getEntityManager(){
return fabCon.createEntityManager();
}

public DAO() {
fabCon = Persistence.createEntityManagerFactory("sistema");
}

public Session getSession(){
Session session = null;

if (getEntityManager().getDelegate() instanceof EntityManagerImpl) {
EntityManagerImpl entityManagerImpl = (EntityManagerImpl) getEntityManager().getDelegate();
return entityManagerImpl.getSession();
} else {
return (Session) getEntityManager().getDelegate();
}
}
}



4 Respostas


Valdejanio

O erro é similar ao que mostro na última aula de complemento.

Peço que assista a ela.




Segui seu conselho assisti a ultima aula fiz todas correções sugeridas por vc mesmo assim continua dando errado mudou somente o erro vou te passar o imagem do erro:


Vou te enviar também o meu projeto sem as lib para vc analizar o que estou fazendo de errado.

Meu Projeto HibernateJSP.zip




Valdejanio

Poste o código do DAO e Cliente DAO usando as tags do fórum, assim, podemos verificar melhor.

Outra coisa que pode ser interessante: na página do curso online, você tem o fonte completo, peço que antes, compare o seu DAO e ClienteDAO com o fonte do curso.

Ficamos no seu aguardo




eu estava com o mesmo erro que o teu mas:

}catch(Exception e){
//em.getTransaction().rollback();
}

tava pesquisando na net e li que poderia ser erro nessa linha, entao comentei ela e funcionou!(nao sei pq)