VRaptor + Hibernate + PostgresSql - não insere (resolvido)

olá pessoal

estou seguindo a apostila do FJ-28, só que utilziando postgres em vez de mySql e ao testar está com um erro estranho: ao executar o adiciona o registro solicitado não é incluído no banco mas o sequence corresponde ao id do registro é atualizado. po exemplo, gero a tabela, faço três inclusões, a tabela está vazia mas o sequence correspondente a tabela no postgres indica que o último registro incluído foi o 3.

após criar o banco via Eclipse o console exibe:

15:20:39,000 INFO SchemaExport:154 - Running hbm2ddl schema export
15:20:39,000 DEBUG SchemaExport:170 - import file not found: /import.sql
15:20:39,000 INFO SchemaExport:179 - exporting generated schema to database

drop table Usuario

15:20:39,250 DEBUG SchemaExport:303 -
drop table Usuario

drop sequence hibernate_sequence

15:20:39,265 DEBUG SchemaExport:303 -
drop sequence hibernate_sequence

create table Usuario (
    id int8 not null,
    senha varchar(255),
    usuario varchar(255),
    primary key (id)
)

15:20:39,265 DEBUG SchemaExport:303 -
create table Usuario (
id int8 not null,
senha varchar(255),
usuario varchar(255),
primary key (id)
)

create sequence hibernate_sequence

15:20:39,281 DEBUG SchemaExport:303 -
create sequence hibernate_sequence
15:20:39,281 INFO SchemaExport:196 - schema export complete

aí executo três inclusões (TestaUsuario.java) e a saída na console é:
Hibernate:
select
nextval (‘hibernate_sequence’)
Hibernate:
select
nextval (‘hibernate_sequence’)
Hibernate:
select
nextval (‘hibernate_sequence’)

o que pode estar acontecendo?

a seguir cópia dos fontes:

Dao.java

package br.lna.lojavirtual.dao;

import java.util.List;

import org.hibernate.Session;

/**

  • Data Access Object referente a entidade T.
    */
    public class Dao {

private final Session session;
private final Class classe;
Dao(Session session, Class classe) {
this.session = session;
this.classe = classe;
}
public void adiciona(T u) {
this.session.save(u);
}
public void remove(T u) {
this.session.delete(u);
}

public List listaTudo() {
List list = this.session.createCriteria(this.classe).list();
return list;
}
}
DaoFactory.java

package br.lna.lojavirtual.dao;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.vraptor.annotations.Component;

import br.lna.lojavirtual.modelo.*;
import br.lna.lojavirtual.util.HibernateUtil;

@Component(“usuario”)
public class DaoFactory {
private final Session session;
private Transaction transaction;

public DaoFactory() {
	session = HibernateUtil.getSession();
}

public void beginTransaction() {
	this.transaction = this.session.beginTransaction();
}

public void commit() {
	this.transaction.commit();
	this.transaction = null;
}

public boolean hasTransaction() {
	return this.transaction != null;
}

public void rollback() {
	this.transaction.rollback();
	this.transaction = null;
}

public void close() {
	this.session.close();
}

public Dao<Usuario> getUsuarioDao() {
	return new Dao<Usuario>(this.session, Usuario.class);
}

}
DaoFactory

package br.lna.lojavirtual.logic;

import org.vraptor.Interceptor;
import org.vraptor.LogicException;
import org.vraptor.LogicFlow;
import org.vraptor.annotations.Out;
import org.vraptor.view.ViewException;

import br.lna.lojavirtual.dao.DaoFactory;
public class DaoInterceptor implements Interceptor {
private final DaoFactory factory = new DaoFactory();
public void intercept(LogicFlow flow) throws LogicException, ViewException {
// executa a logica
flow.execute();
// se sobrou transacao sem comitar, faz rollback
if (factory.hasTransaction()) {
factory.rollback();
}
factory.close();
}
@Out(key=“br.lna.lojavirtual.dao.DaoFactory”)
public DaoFactory getFactory() {
return factory;
}
}
UsuarioLogic.java

package br.lna.lojavirtual.logic;

import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;

import br.lna.lojavirtual.dao.DaoFactory;
import br.lna.lojavirtual.modelo.Usuario;
import br.lna.lojavirtual.logic.DaoInterceptor;

@Component
@InterceptedBy(DaoInterceptor.class)
public class UsuarioLogic {

private final DaoFactory daoFactory;

public UsuarioLogic(DaoFactory daoFactory) {
    
    this.daoFactory = daoFactory;
}
public void adiciona (Usuario usuario) {
	this.daoFactory.beginTransaction();
    this.daoFactory.getUsuarioDao().adiciona(usuario);
    this.daoFactory.commit();
}
public  void formulario() {
	
}

}
HibernateUtil

package br.lna.lojavirtual.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class HibernateUtil {
private static SessionFactory factory;
static {
Configuration conf = new AnnotationConfiguration();
conf.configure();
factory = conf.buildSessionFactory();
}
public static Session getSession() {
return factory.openSession();
}
}

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> org.postgresql.Driver usujavatst jdbc:postgresql://localhost:5432/javatst usujavatst org.hibernate.dialect.PostgreSQLDialect
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    
    <mapping class="br.lna.lojavirtual.modelo.Usuario"/>
</session-factory>

TestaUsuario.java

package br.lna.lojavirtual.main;

import br.lna.lojavirtual.dao.Dao;
import br.lna.lojavirtual.dao.DaoFactory;
import br.lna.lojavirtual.modelo.Usuario;

public class TestaUsuario {

public static void main(String[] args) {

	Dao<Usuario> dao = new DaoFactory().getUsuarioDao();
	
	Usuario u1 = new Usuario();

	u1.setUsuario("ivana");
	u1.setSenha("lna");
	dao.adiciona(u1);

	Usuario u2 = new Usuario();
	u2.setUsuario("lneumann");
	u2.setSenha("lna");
	dao.adiciona(u2);

	Usuario u3 = new Usuario();
	u3.setUsuario("angelof");
	u3.setSenha("lna");
	dao.adiciona(u3);
	
}

}

luineumann tudo bom ?

Bom meu amigo eu disponibilizo no forum do VRaptor os fontes para tira dúvidas, este é o link:

http://www.vraptor.com.br/forum/posts/list/272.page

fique a vontade para tirar suas dúvidas lá no forum !

grande abraço !

use o controle de transacoes no TestaUsuario tbm

valeu sérgio

fiz a inclusão das transações e deu certo