1

I'm trying to build an application using hibernate. The thing is, sessionFactory can't open a session because there is a NullPointerException at Session session = sessionFactory.openSession(); and that's why at myAccount.addElement("August", 50000, 14000, 10000, 10000, 16000); too.

Main class

package myaccount1;
import myaccount.entity1.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import java.util.List;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;

public class MyAccount {


private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;

public static SessionFactory createSessionFactory() {
    Configuration configuration = new Configuration();
    configuration.configure();
    ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
            configuration.getProperties()).build();
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    return sessionFactory;
}

public static void main(String[] args) {

        MyAccount myAccount = new MyAccount();

        System.out.println("Adding an element");

        myAccount.addElement("August", 50000, 14000, 10000, 10000, 16000);
        myAccount.addElement("September", 50000, 14000, 10000, 10000, 16000);

        System.out.println("List of elements");



    }

public void addElement(String mounth, int salary, int must_save_for_rent, int must_save_for_education, int must_save, int balance) {
    Session session = sessionFactory.openSession();
    Transaction transaction = null;

    try {
        transaction = session.beginTransaction();
        MyAccountEntity element = new MyAccountEntity(mounth, salary, must_save_for_rent, must_save_for_education, must_save, balance);
        session.save(element);
        transaction.commit();
    } catch (Exception e) {
        if (transaction != null) {
            transaction.rollback();
            e.printStackTrace();
        }
        e.printStackTrace();
    } finally {
        session.close();
    }

}
}

Configuration file

<?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/app?zeroDateTimeBehavior=convertToNull</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">sopromat</property>
<mapping class="myaccount.entity1.MyAccountEntity.hbm.xml"/>
</session-factory>
</hibernate-configuration>

HibernateUtil class

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;


public class HibernateUtil {
    private static SessionFactory sessionFactory = 
            buildSessionFactory();
    private static ServiceRegistry serviceRegistry;

    private static SessionFactory buildSessionFactory() {
        try {

            Configuration configuration = new Configuration();
            configuration.configure();
            //Use config file path explicitly 
            //configuration.configure("hibernate/hibernate.cfg.xml");
            serviceRegistry = new StandardServiceRegistryBuilder()
            .applySettings(configuration.getProperties()).build();
            sessionFactory = configuration
                    .buildSessionFactory(serviceRegistry);
            return sessionFactory;

        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory "
                    + "creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }

}

Mapping file

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class name="myaccount.entity1.MyAccountEntity" table="myaccount">
      <id name="id" type="int" column="id">
            <generator class="auto_increment"/>
        </id>
        <property name="mounth" column="mounth" type="string"/>
        <property name="salary" column="salary" type="int"/>
        <property name="must_save_for_rent" column="must_save_for_rent" type="int"/>
        <property name="must_save_for_education" column="must_save_for_education" type="int"/>
        <property name="must_save" column="must_save" type="int"/>
        <property name="balance" column="balance" type="int"/>
    </class>
</hibernate-mapping>

Project structure enter image description here

What's wrong? Please help, i don't know what to do.

  • Possible duplicate of [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Rabbit Guy Aug 03 '17 at 18:27
  • You've not initialized the variable `sessionFactory` by calling `createSessionFactory` and assinging it. Or just change your code to use `HibernateUtil.getSessionFactory().openSession()` instead of the current code. – Kishore Bandi Aug 03 '17 at 18:29
  • `HibernateUtil.getSessionFactory().openSession()` that works! but there're loads of new problems. – dubinkincorp Aug 03 '17 at 18:41
  • stack trace `Exception in thread "main" java.lang.ExceptionInInitializerError at myaccount1.HibernateUtil.buildSessionFactory(HibernateUtil.java:31) at myaccount1.HibernateUtil.(HibernateUtil.java:12) at myaccount1.MyAccount.addElement(MyAccount.java:46) at myaccount1.MyAccount.main(MyAccount.java:36)` – dubinkincorp Aug 03 '17 at 18:44

0 Answers0