laciane
laciane

Reputation: 17

Exception in my hibernate 4 test class while creating the session

The problem is when I execute my class test. it display an throw an exception instead of creating the session it throw an exception and you can see in the console like :my config file xml of mapping (resource: com.live.hibernate.User.hbm.xm) not found. I do a simple example :

User.java :

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;
    }

    @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>
    <class>
        <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 void openSession(){
        Configuration conf = new Configuration();
        SessionFactory sessionFactory= conf.configure().buildSessionFactory();
        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

Remark: I have an exception when I reach to this line :

SessionFactory sessionFactory= conf.configure().buildSessionFactory();

you know the buildSessionFactory() method is deprecated . Any idea ?

please anybody could help me !

Updated I added createSessionFactory() method so my class HibernateTest.java became like:

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();
}

}

Also I added the attributes name and table of class tag so User.hbm.xml became like :

<?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>
    <class name="com.live.beans.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>

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

BUT I have an exception when I reach to this line (I mean while debuging):

configuration.configure("hibernate.cfg.xml");

Although I use configuration.configure(); ,I got the same problem.

and this is my consol :

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" org.hibernate.MappingNotFoundException: resource: com.live.hibernate.models.User.hbm.xml not found
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:724)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2102)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2074)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2054)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2007)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1922)
    at com.liveSpreaker.presentation.HibernateTest.createSessionFactory(HibernateTest.java:33)
    at com.liveSpreaker.presentation.HibernateTest.openSession(HibernateTest.java:45)
    at com.liveSpreaker.presentation.HibernateTest.<init>(HibernateTest.java:56)
    at com.liveSpreaker.presentation.HibernateTest.main(HibernateTest.java:65)

please help me

Upvotes: 0

Views: 142

Answers (1)

user3207081
user3207081

Reputation: 1561

You need to pass a path to your hibernate.cfg.xml

SessionFactory sessionFactory= conf.configure("path/to/hibernate.cfg.xml").buildSessionFactory();

If you place your hibernate.cfg.xml in src\main\resources\hibernate.cfg.xml you don't have to specify a path to your config file, because it is default location.

And yes, it is deprecated http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory

buildSessionFactory() Deprecated. Use buildSessionFactory(ServiceRegistry) instead

Upvotes: 1

Related Questions