Ola, acabei de iniciar meus estudo na persistência de dados e estou utilizando o FrameWork Hibernate, quando executa a operação de inserir dados no banco, os dados são inseridos com sucesso, porem a construção nunca termina e não da nenhum erro, gostaria de saber como fazer para a aplicação terminar.
Obs:Utilizo o netbeans.
Também queria saber kkkkk vc achou uma solução? Pois a minha foi fazer o System.exit(0)
Sem postar o código fica mais difícil alguém ajudar. Pode ser algo relacionado a falta de commit ou mal uso de alguma tranqueira do hibernate, como mapeamentos, configurações, falta de flush, etc.
@javaflex o meu tá assim:
o minha configuração do hibernate é esta:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/cadastro?zeroDateTimeBehavior=convertToNull</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.show_sql">false</property>
<mapping class="model.Usuario"/>
</session-factory>
</hibernate-configuration>
Eu tenho a Classe HibernateUtil que é criada sozinha pelo netbeans. Minha entidade:
@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {
@Id
@GeneratedValue
private int id;
private String nome;
private int idade;
//gets e sets
}
e após isso eu testei assim:
public static void main(String[] args) {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Transaction t = sessao.beginTransaction();
List<Usuario> usuarios = sessao.createQuery("from Usuario").list();
usuarios.forEach(usuario ->{System.out.println(usuario);});
t.commit();
sessao.close();
//mesmo acontecendo com sucesso, continua aparecendo um monte de log no
//no console, então tenho q parar a execução aqui.
System.exit(0);
}
Quando eu executo uma Query, q nem o exemplo acima fica assim:
veja que depois de mostrar o resultado e tudo, ainda continua em execução,
Não deve ter haver com o problema, mas não precisa de begin trans/commit para selects.
Como assim continua em execução? Os logs que você mostrou são anteriores aos prints do resultado.
Executando a aplicação de verdade por fora do Netbeans ocorre o mesmo?
Em HibernateUtil não tem algo prendendo sua aplicação? SessionFactory por exemplo costuma ser um objeto pesado que fica vivo o tempo todo na aplicação.
1 curtida
então @javaflex e que quando faz query não parece mais log após o resultado, mas o programa continua rodando normal, mas ao pensar, acabei descobrindo como, segue o código:
public static void main(String[] args) {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Transaction t = sessao.beginTransaction();
List<Usuario> usuarios = sessao.createQuery("from Usuario").list();
usuarios.forEach(usuario ->{System.out.println(usuario);});
sessao.close();
//aqui para de vez a execução do programa.
HibernateUtil.getSessionFactory().close();
}
aí com isso ele para:
Exatamente, o SessionFactory estava prendendo sua aplicação.
1 curtida
Pois é mano, era isso mesmo! Obrigado pela ajuda 