0

Instead of saving my object, it launch an issue when it reach to save method.

You can see in the console like:

log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" java.lang.NullPointerException
    at com.liveSpreaker.presentation.HibernateTest.<init>(HibernateTest.java:58)
    at com.liveSpreaker.presentation.HibernateTest.main(HibernateTest.java:65)

my bean like:

package com.live.beans;

public class User {

    private int id;
    private String Name;
    private String email;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public User(int id, String name, String email, String password) {
        super();
        this.id = id;
        Name = name;
        this.email = email;
        this.password = password;
    }

    public User(String name, String email, String password) {
        super();
        Name = name;
        this.email = email;
        this.password = password;
    }


    @Override
    public String toString() {
        return "User [id=" + id + ", Name=" + Name + ", email=" + email
                + ", password=" + password + "]";
    }

}

User.hbm.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.live.beans">
    <class name="User" table="user">
        <id name="id"
            type="int" 
            column="id" 
            length="15"/>
        <property name="name" 
                  type="string"
                  column="name"
                  length="45"
        />
        <property name="email" 
                  type="string"
                  column="email"
                  length="45"
        />
        <property name="password" 
                  type="string"
                  column="password"
                  length="45"
        />
    </class>

</hibernate-mapping>

My class HibernateTest.java:

package com.live.presentation;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.live.beans.User;

public class HibernateTest {

    private Session session;
    private static SessionFactory sessionFactory;
    private static ServiceRegistry serviceRegistry;

    public static SessionFactory createSessionFactory() {
            Configuration configuration = new Configuration();
            configuration.configure("hibernate.cfg.xml");
            serviceRegistry = new ServiceRegistryBuilder().applySettings(
                    configuration.getProperties()).buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            return sessionFactory;
    }
    private void openSession(){
        SessionFactory sessionFactory = createSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
    }

    private void closeSession(){
        session.getTransaction().commit();
        session.close();
    }

    public HibernateTest() {
        openSession();
        User p = new User(1, "Ali", "[email protected]", "password");
        session.save(p);
        System.out.println("sauvegarde reussi");
        closeSession();
    }

public static void main(String[] args) {

    new HibernateTest();
}

pom.xml :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>p01</groupId>
  <artifactId>p01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <name>HibernateTest</name>
  <url>http://maven.apache.org</url>
  <dependencies>
          <dependency>
          <groupId>com.sun.faces</groupId>
          <artifactId>jsf-api</artifactId>
          <version>2.1.7</version>
        </dependency>
        <dependency>
          <groupId>com.sun.faces</groupId>
          <artifactId>jsf-impl</artifactId>
          <version>2.1.7</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>4.0.1.Final</version>
            <classifier>tests</classifier>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>3.1.0.CR2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.4</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.10</version>
        </dependency>


    </dependencies>
</project>

hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>

        <property name="hibernate.connection.url">jdbc:mysql://localhost/ment</property>

        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

        <property name="hibernate.connection.username">root</property>

        <property name="hibernate.connection.password"></property>

        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="hibernate.show_sql">false</property>

        <mapping resource="com.live.hibernate.User.hbm.xml" />

    </session-factory>
</hibernate-configuration>

Folder structure :

src
 |-- com
 |   live
 |    |-- hibernate
 |    |    `-- User.hbm.xml
 |   live
 |    |`--beans
 |    |    `-- User.java
 |   live
 |     `--presentation
 |        `-- HibernateTest.java
 |--hibernate.cfg.xml
WebContent
 |-- META-INF
 |-- WEB-INF
 |         
 |-- index.xhtml
 pom.xml

I have an exception when I reach at this line which is in HibernateTest.java class (I mean while debuging):

session.save(p);

Although I use User p = new User(1,"Ali", "[email protected]", "password"); I got the same issue in session.save(p);.

I am using MySQL, and I have created database called ment and a table user with four columns (id,name,email,password).

2
  • 1
    The issue here likely isn't with your Hibernate test configuration; it looks like something is invoking Log4j before it's been set up. Either you didn't set it up yourself earlier, or the library you're using has a call to initialize it that wasn't made. Commented Jun 29, 2015 at 13:59
  • @ShotgunNinja : thanks so much but I don't think so because I had issue and I fixed it and I remember it always invoking Log4j. I think my problem not belong to Log4j Commented Jun 29, 2015 at 14:27

1 Answer 1

1

Your session variable (the one you use in the constructor for HibernateTest) hasn't been initialized. Therefore, it is still null and that causes session.save(p); to throw a NPE.

Change the code in openSession() to

private void openSession(){
    SessionFactory sessionFactory = createSessionFactory();
    session = sessionFactory.openSession();
    session.beginTransaction();
}

Ie, open the new session on your field instead of on a private variable in the scope of that method that disappears after the method has been run.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.