2015-06-29 2 views
0

Когда я запускаю свой тестовый класс, он запускает исключение вместо создания сеанса. Вы можете увидеть в консоли, какИсключение при создании сеанса hibernate 4

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) 

мой боба как:

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

Мой класс 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 класс (я имею в виду в то время отладки):

configuration.configure («hibernate.cfg.xml»);

Хотя я использую configuration.configure(); ,У меня та же проблема.

Пожалуйста, кто-нибудь может мне помочь!

+0

Но ваша структура папки неправильная. Папка live находится внутри папки com или нет? – Guillermo

+0

@ GuillermoFernández да это я отредактирую свое сообщение –

ответ

1

Ресурс сопоставления является неправильным. Используйте/для разделения папок.

Проверьте конфигурацию следуя section of Hibernate Documentation

И вам не нужно добавлять в спящий режим. префикс в свойствах имени

<?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="connection.url">jdbc:mysql://localhost/ment</property> 
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="connection.username">root</property> 
    <property name="connection.password"></property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="show_sql">false</property> 
    <mapping resource="com/live/hibernate/User.hbm.xml" /> 
    </session-factory> 
</hibernate-configuration> 

Edit: Метод openSession использует метод области видимости переменных вместо ваших переменных класса, так что вы должны быть исключения нулевого указателя в заявлении session.save(p) наверняка. Внимательно просмотрите свой код !. Я также предлагаю вам добавить findbugs-maven-plugin, чтобы обнаружить ошибки сообщества в вашем коде. Вы можете использовать его в фазе компиляции, чтобы сбой сборки, когда есть такие ошибки. Here is simple tutorial.

+0

Вы так сильно благодарите за свою помощь, он пропустил эту проблему, но у меня возникла другая проблема в session.save (p); есть ли у вас идеи, пожалуйста? –

+0

Я только что отредактировал ответ, вам нужно сделать это легко и просмотреть код. – Guillermo

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