java - 创建 session 时我的 hibernate 4 测试类出现异常

标签 java hibernate maven session hibernate-mapping

问题是当我执行类测试时。它显示抛出异常,而不是创建 session ,它抛出异常,您可以在控制台中看到:找不到映射的我的配置文件 xml(资源:com.live.hibernate.User.hbm.xm)。我做了一个简单的例子:

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>

我的类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", "ali@gmail.com", "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

备注:当我到达此行时出现异常:

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

您知道 buildSessionFactory() 方法已被弃用。有什么想法吗?

请任何人都可以帮助我!

已更新 我添加了 createSessionFactory() 方法,因此我的类 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", "ali@gmail.com", "password");
        session.save(p);
        System.out.println("sauvegarde reussi");
        closeSession();
    }

public static void main(String[] args) {

    new HibernateTest();
}

}

我还添加了类标签的属性名称和表,因此 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>

文件夹结构:

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

但是当我到达这一行时(我的意思是在调试时),我遇到了异常:

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

虽然我使用 configuration.configure(); ,但我遇到了同样的问题。

这是我的控制台:

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)

请帮助我

最佳答案

您需要传递 hibernate.cfg.xml 的路径

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

如果将 hibernate.cfg.xml 放在 src\main\resources\hibernate.cfg.xml 中,则不必指定配置文件的路径,因为它是默认位置。

是的,它已被弃用 http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory

buildSessionFactory() Deprecated. Use buildSessionFactory(ServiceRegistry) instead

关于java - 创建 session 时我的 hibernate 4 测试类出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31075926/

相关文章:

maven - 如何仅将 pom 文件部署到 Maven 中的快照存储库?

java - Maven 2 - 测试和编译中的不同依赖版本

java - Android - 其他应用窃取我的 Intent 接收器?

java - 使用 setValue(Object) 时如何不将特定变量存储在数据库中?

java - 线程中的异常 "main"org.hibernate.exception.SQLGrammarException : ORA-00926: missing VALUES keyword

hibernate - JPA 条件 API 查询子类属性

java - hibernate 更新始终为空

java - 7 和 8 之间的 Eclipse 兼容性中断中的空分析

java - 使用 String Replace() 或 ReplaceAll() 配置动态电子邮件内容

java - 为什么它不交出我的东西?