Olá pessoal.
Estou com um probleminha aqui… Tenho conseguido fazer insert, select e etc pelo Hibernate… Criei uma classe DAO. Só que toda hora que eu preciso inserir ou fazer um select, tenho que criar uma nova instância dessa classe, fazendo assim rodar dinovo o Hibernate, pq ele cria uma SectionFactory… Tornando o sistema meio lento, pois ele roda tudo outra vez. Estou desenvolvendo um programa desktop, então estou utilizando Swing. Utilizei um botão para cadastrar, o actionListener dele ficou assim:
cmdCadastrar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
String nome = txtNome.getText();
String endereco = txtEndereco.getText();
String email = txtEmail.getText();
String celular = txtCelular.getText();
Amigo novo = new Amigo();
novo.setNome(nome);
novo.setEndereco(endereco);
novo.setEmail(email);
novo.setCelular(celular);
try{
AmigoDAO n = new AmigoDAO();
n.insert(novo);
}catch(Exception ex){
}
}
});
e o meu DAO está assim:
import java.util.List;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
public class AmigoDAO{
private SessionFactory factory;
public AmigoDAO() throws Exception{
factory = new Configuration().addClass(Amigo.class).buildSessionFactory();
}
public void insert(Amigo amigo) throws Exception{
Session session = factory.openSession();
//não preicsei criar uma transação pois eu setei o hibernate.properties para autocommit
//Transaction transaction = session.beginTransaction();
session.save(amigo);
session.flush();
//transaction.commit();
session.close();
}
public java.util.List getList(String condicao) throws Exception{
Session session = factory.openSession();
Criteria select = session.createCriteria(Amigo.class);
//Query select = session.createQuery("from Amigo");
List amigos = select.list();
session.flush();
session.close();
return amigos;
}
public Amigo retrieve(String pk) throws Exception{
Session session = factory.openSession();
Amigo amigo = (Amigo) session.load(Amigo.class,pk);
session.flush();
session.close();
return amigo;
}
public java.util.List retrieve2(String nome) throws Exception{
Session session = factory.openSession();
Query select = session.getNamedQuery("buscarAmigosPeloNome");
select.setString("nome", nome);
List encontrado = select.list();
session.flush();
session.close();
return encontrado;
}
public void delete(Amigo amigo) throws Exception{
Session session = factory.openSession();
session.delete(amigo);
session.flush();
session.close();
}
}
O que fazer para não ter que ficar criando uma nova SectionFactory toda vez que efetuar um cadastro, fazer um select, etc?
Grato desde já
Thiago!
