Hibernate não termina a Execução

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 :slight_smile: