2015-06-29 6 views
0

Вместо сохранения моего объекта он запускает проблему, когда он достигает метода сохранения.Исключение Hibernate при сохранении моего объекта

Вы можете увидеть в консоли, как:

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) 

мой боба как:

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> 

Мой класс 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> 

Структура папок:

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 

У меня есть исключение, когда я достигаю в этой линии, которая находится в классе HibernateTest.java (я имею в виду в то время отладки):

session.save(p); 

Хотя я использую User p = new User(1,"Ali", "[email protected]", "password"); я получил тот же самый вопрос в session.save(p);.

Я использую MySQL, и я создал базу данных под названием MENT и пользователя таблица с четырьмя столбцами (номер, имя, адрес электронной почты, пароль).

+1

Проблема здесь, скорее всего, не в конфигурации вашего Hibernate; похоже, что что-то вызывает Log4j, прежде чем он будет настроен. Либо вы не настраивали его раньше, либо библиотека, которую вы используете, имеет вызов инициализировать ее, которая не была выполнена. –

+0

@ShotgunNinja: Большое спасибо, но я так не думаю, потому что у меня проблема, и я исправил его, и я помню, что он всегда вызывал Log4j. Я думаю, что моя проблема не принадлежит Log4j –

ответ

1

Ваша переменная сеанса (тот, который вы используете в конструкторе для HibernateTest) не был инициализирован. Таким образом, все еще null, и это вызывает session.save(p);, чтобы выбросить NPE.

Изменить код в openSession() для

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

Ie, открыть новую сессию на своем поле, а не на частной переменной в рамках этого метода, который исчезает после того, как метод был бежать.

+0

Большое вам спасибо за ваш ответ. Теперь это работа: D –

Смежные вопросы