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:
[code]@Component
public class AbreSession implements ComponentFactory {
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");
}
}[/code]
CriadorDeSessionFactory:
[code]@Component
@ApplicationScoped
public class CriadorDeSessionFactory implements ComponentFactory {
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();
}
}[/code]
Bom no meu DAO faço assim:
[code]@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();
}[/code]
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?