Fechar conexão Hibernate - Apostila V-Raptor

0 respostas
C

Olá, estou seguindo a apostilo FJ28 da caelum e estou como dúvidas de como usar de como usar esta classe de conexão com o Hibernate:

AbreSession:
@Component
public class AbreSession implements ComponentFactory<Session> {

    private final SessionFactory factory;
    private Session session;

    public AbreSession(SessionFactory factory) {
        this.factory = factory;
    }

    @PostConstruct
    public void abre() {
        this.session = factory.openSession();
        System.out.println("Abre conexão");
    }

    public Session getInstance() {
        return this.session;
    }

    @PreDestroy
    public void fecha() {
        this.session.close();
        System.out.println("Fecha conexão");
    }
    
}
CriadorDeSessionFactory:
@Component
@ApplicationScoped
public class CriadorDeSessionFactory implements ComponentFactory<SessionFactory> {

    private SessionFactory factory;

    @PostConstruct
    public void abre() {
        AnnotationConfiguration configuration = new AnnotationConfiguration();
        configuration.configure();
        this.factory = configuration.buildSessionFactory();
        ;
    }

    public SessionFactory getInstance() {
        return this.factory;
    }

    @PreDestroy
    public void fecha() {
        this.factory.close();
    }
}
Bom no meu DAO faço assim:
@Component
public class ClienteDao {

    private final Session session;
    public ClienteDao(Session session){
        this.session = session;
    }
     public void gravar(Cliente cliente, Session sessio) {
        SessionFactory factory = new CriadorDeSessionFactory().getInstance();
        Session session = new AbreSession(factory).getInstance();
        Transaction tx = session.beginTransaction();
        cliente.setData_cadastro(new Date());
        cliente.setPlaca("PLUS");
        cliente.setMercado("RESIDENCIAL");
        cliente.setNewsletter("S");
        System.out.println("Titulo logradouro: " + cliente.getTitulo_logradouro());
        session.save(cliente);
        tx.commit();
    }
Na Controller tá assim:
public void adiciona(Cliente cliente, Usuario usuario) throws AddressException, MessagingException {
        SessionFactory factory = new CriadorDeSessionFactory().getInstance();
        Session session = new AbreSession(factory).getInstance();
        ClienteDao dao = new ClienteDao(session);
        validator.onErrorUse(Results.page()).of(ClienteController.class).index2();
        String existeDocumento = dao.existeCpf(cliente.getCpf(), session);
        if (existeDocumento != null && existeDocumento.equals(cliente.getCpf())) {
            validator.add(new ValidationMessage("Já existe um cliente cadastrado com este CPF!", ""));
            validator.onErrorUse(Results.page()).of(ClienteController.class).Tela_Cliente_Manter();
        } else {
            dao.gravar(cliente, session);
            String documento = cliente.getCpf();
            int x = dao.pesquisaCod(documento);
            usuario.setGrupo("Cliente");
            daousuario.adiciona(usuario, x);
        }
        result.redirectTo(ClienteController.class).index2();
    }
Estou usando da forma correta?
Criado 27 de novembro de 2010
Respostas 0
Participantes 1