Hibernate persiste, mas quando faço um select não tem nada no banco

Olá pessoal, estou tentando persistir objetos no banco. Quando faço o SAVE + Commit os dados aparecem no banco, mas se em seguida eu fizer chamar o método Listar(), não retorna nada e quando vou ver não tem mais nenhum dado no banco.

Segue o codigo da classe Cliente:

import java.util.LinkedList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="Cliente")
public class Cliente {
	
	@Id
	@Column(name="cpfCnpj")
	private String cpfCnpj;
	
	@Column(name="owners", nullable=true)
	private String owners;
	
	@Column(name="nomeRazao", nullable=true)
	private String nomeRazao;
	
	@Column(name="servPrestado", nullable=true)
	private String servPrestado;
	
	  
	
	public Cliente() {
		
	}

	public Cliente(String cpfCnpj, String owners, String nomeRazao,
			String servPrestado) {
		super();
		this.cpfCnpj = cpfCnpj;
		this.owners = owners;
		this.nomeRazao = nomeRazao;
		this.servPrestado = servPrestado;
	}

	public final String getCpfCnpj() {
		return cpfCnpj;
	}

	public final String getOwners() {
		return owners;
	}

	public final void setOwners(String owners) {
		this.owners = owners;
	}

	public final String getNomeRazao() {
		return nomeRazao;
	}

	public final void setNomeRazao(String nomeRazao) {
		this.nomeRazao = nomeRazao;
	}

	public final String getServPrestado() {
		return servPrestado;
	}

	public final void setServPrestado(String servPrestado) {
		this.servPrestado = servPrestado;
	}

	public final void setCpfCnpj(String cpfCnpj) {
		this.cpfCnpj = cpfCnpj;
	}

	
}

Segue o código do meu DAO:

public void saveCliente(String cpfCnpj, String nomeRazao, String owners,
			String servPrestado) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction transaction = null;
				
		try {
			transaction = session.beginTransaction();
			Cliente cliente = new Cliente();
			cliente.setCpfCnpj(cpfCnpj);
			cliente.setNomeRazao(nomeRazao);
			cliente.setOwners(owners);
			cliente.setServPrestado(servPrestado);
			session.save(cliente);
			transaction.commit();
		
		} catch (HibernateException e) {
			transaction.rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
	
	}

Agora o código do meu HibernateUtil:

public class HibernateUtil {
	
	private static String DB_DIALECT = "org.hibernate.dialect.MySQLDialect";
	private static String DB_DRIVER_CLASS = "com.mysql.jdbc.Driver";
	private static String DB_URL = "jdbc:mysql://localhost/sisdecon";
	private static String DB_USERNAME = "root";
	private static String DB_PASSWORD = "123";
	private static String DB_SHOSQL = "true";
	
	private  final static SessionFactory sessionFactory;

	static {
		try {
			sessionFactory = new AnnotationConfiguration()
					.configure()
					.addPackage("br.com.novaideia.sisdecon.model")
					// the fully qualified
					// package name
					.addAnnotatedClass(Cliente.class)
					.setProperty("hibernate.dialect", DB_DIALECT)  
					.setProperty("hibernate.connection.driver_class", DB_DRIVER_CLASS)  
					.setProperty("hibernate.connection.url", DB_URL)  
					.setProperty("hibernate.connection.username", DB_USERNAME)  
					.setProperty("hibernate.connection.password", DB_PASSWORD)
					.setProperty("show_sql", DB_SHOSQL)
					
					.buildSessionFactory();

		} catch (Throwable ex) {
			System.err.println("Initial SessionFactory creation failed." + ex);
			throw new ExceptionInInitializerError(ex);
		}
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
}

Quando adiciono um objeto e vou fazer um delete aparece a seguinte msg: java.lang.NullPointerException. É algum problema o metodo saveCliente()? Como resolvo isso?

Agradeço a ajuda de todos.

Acho que o problema é que na url do banco vc não mencionou a porta

jdbc:mysql://localhost:3036/sisdecon

pelo pouco que conheço, parece que está faltando os .addAnnotatedClass na sessionFactory do método static…

Coloquei a porta mas o problema continua. Faço o save, verifico se os dados estão no banco e estão. Volto e faço o list, mas não retorna nada e quando vou olhar no banco não tem mais nenhum dado lá.

[quote=edu_merckx]pelo pouco que conheço, parece que está faltando os .addAnnotatedClass na sessionFactory do método static…

[/quote]

O AnnotatedClass está no código acima.

ops… não tinha percebido…

posta sua classe Cliente…

Atualizei o primeiro post.

No método saveCliente na linha onde vc declara o atributo transaction apenas declara ele deixa ele sem ser instanciado como null.

antes do session.save() faz um session.flush()

se nao funcionar, posta o metodo listar() ou qualquer outro metodo que apresente o erro que esta ocorrendo pra gente ver.

Quando eu executo o codigo abaixo tudo de uma vez, funciona normal, mas quando executo o SAVE pra depois executar o list ou delete ai não dá certo, dá erro e quando vou ver não tem mais nada no banco.
Vejam o código abaixo:

public static void main(String[] args) {
		
		ClienteDao clienteDao = new ClienteDao();
					
		clienteDao.saveCliente("04857176467", "Andrade e Cia", "Luis Andrade", "Consultoria em Informatica");
		clienteDao.saveCliente("00000111111", "Campina e Cia", "Ednacio Arruda", "Bleh");
		clienteDao.saveCliente("11111100000", "Toledo e Cia", "Toledo Marciel", "Laticinios");
		clienteDao.saveCliente("22222200000", "9Ideia", "Lucas Sales", "Marketing e Publicidade");
		clienteDao.listClientes();
		clienteDao.updateCliente("04857176467", "EU", "EU e CIA", "Bluh");
		clienteDao.deleteCliente("04857176467");
		
	}

Se eu fizer isso, dá problema no transaction.rollback();

[quote=Der Meister]antes do session.save() faz um session.flush()

se nao funcionar, posta o metodo listar() ou qualquer outro metodo que apresente o erro que esta ocorrendo pra gente ver.[/quote]

Fiz o que você disse mas quando faço o listar depois, ai já não tem mais nada no banco e por isos nao retorna nada.

[code]
@SuppressWarnings(“unchecked”)
public void listClientes() {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
List listaClientes = session.createQuery(“from Cliente”)
.list();

		for (Cliente cliente : listaClientes) {
			System.out.println(cliente.getNomeRazao());
		}

		transaction.commit();
	} catch (HibernateException e) {
		transaction.rollback();
		e.printStackTrace();
	} finally {
		session.close();
	}
}[/code]

de uma olhada ae… talvez ajude…
olha o jeito que voce esta fazendo e como o exemplo esta fazendo…

http://www.developer.com/open/article.php/10930_3322131_2/Introducing-HQL-The-Object-Oriented-Query-Language-from-Hibernate.htm

[quote=Der Meister]de uma olhada ae… talvez ajude…
olha o jeito que voce esta fazendo e como o exemplo esta fazendo…

http://www.developer.com/open/article.php/10930_3322131_2/Introducing-HQL-The-Object-Oriented-Query-Language-from-Hibernate.htm[/quote]

Mas o que é que explica os dados desaparecerem do banco mesmo depois de fazer o commit?

uma coisa que percebi agora no seu método listClientes() é tipo de retorno void - não irá retornar nada mesmo, mas isso ainda não explica pq os dados estão sendo apagados…

fiz um teste usando a mesma estrutura que postou e aqui rodou sem problemas…

Estranho de mais isso!! Puts!!

Acho que é a sua configuração do hibernate:

hibernate.hbm2ddl.auto
With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly.

Arranca esse parâmetro do arquivo de configuração.

[quote=fabiocsilva]Acho que é a sua configuração do hibernate:

hibernate.hbm2ddl.auto
With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly.

Arranca esse parâmetro do arquivo de configuração.[/quote]

Amigo, deu certo após retirar essa propriedade. Muito Obrigado.

valeu fabiocsilva…