【问题标题】:Hibernate : Failed to create sessionFactory object.org.hibernate.InvalidMappingExceptionHibernate:无法创建 sessionFactory object.org.hibernate.InvalidMappingException
【发布时间】:2013-08-11 05:12:11
【问题描述】:

如果这是与任何现有问题的重复,我很抱歉。以下是我的员工 bean。

public class Employee {
       private int id;
       private String firstName; 
       private String lastName;   
       private int salary;  

       public Employee() {}
       public Employee(String fname, String lname, int salary) {
          this.firstName = fname;
          this.lastName = lname;
          this.salary = salary;
       }
       public int getId() {
          return id;
       }
       public void setId( int id ) {
          this.id = id;
       }
       public String getFirstName() {
          return firstName;
       }
       public void setFirstName( String first_name ) {
          this.firstName = first_name;
       }
       public String getLastName() {
          return lastName;
       }
       public void setLastName( String last_name ) {
          this.lastName = last_name;
       }
       public int getSalary() {
          return salary;
       }
       public void setSalary( int salary ) {
          this.salary = salary;
       }
    }

我想将它映射到我的 postgres 表员工

CREATE TABLE employee
(
  id integer NOT NULL DEFAULT nextval('emp_id_seq'::regclass),
  first_name character varying(20),
  last_name character varying(20),
  salary integer,
  CONSTRAINT employee_pkey PRIMARY KEY (id)
)

这是我的主类代码 sn-p

  try{
     factory = new Configuration().configure().buildSessionFactory();
  }catch (Throwable ex) { 
     System.err.println("Failed to create sessionFactory object." + ex);
     throw new ExceptionInInitializerError(ex); 
  }

运行时出现以下错误

Failed to create sessionFactory object.org.hibernate.InvalidMappingException: Could not parse mapping document from resource Employee.hbm.xml
Exception in thread "main" java.lang.ExceptionInInitializerError
    at ManageEmployee.main(ManageEmployee.java:26)
Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from resource Employee.hbm.xml
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:575)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1593)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1561)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1540)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1514)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1434)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1420)
    at ManageEmployee.main(ManageEmployee.java:23)

这是我的映射文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package = "com.demo.hibernate.beans">
   <class name="Employee" table="employee">
      <meta attribute="class-description">
         This class contains the employee detail. 
      </meta>
      <id name="id" type="int" column="id">
         <generator class="native"/>
      </id>
      <property name="firstName" column="first_name" type="string"/>
      <property name="lastName" column="last_name" type="string"/>
      <property name="salary" column="salary" type="int"/>
   </class>
</hibernate-mapping>

我知道这与 Employee.hbm.xml 有关的可能原因是什么。请帮忙

提前致谢!!!

如果有帮助,这里是 CFG 文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration>
   <session-factory>
   <property name="hibernate.dialect">
      org.hibernate.dialect.PostgreSQLDialect
   </property>
   <property name="hibernate.connection.driver_class">
      org.postgresql.Driver
   </property>

   <!-- Assume test is the database name -->
   <property name="hibernate.connection.url">
      jdbc:postgresql://localhost:5432/postgres
   </property>
   <property name="hibernate.connection.username">
      postgres
   </property>
   <property name="hibernate.connection.password">
      postgres
   </property>

   <!-- List of XML mapping files -->
   <mapping resource="Employee.hbm.xml"/>

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

【问题讨论】:

  • @你有hibernate.cfg.xml吗?
  • 你的Employee类在任何包下吗?
  • HBM CFG 和类都在 src 文件夹下
  • 为什么不重新尝试将其放入包中?
  • 正如 JtheRocker 所说,试着把它放在一个包中,并像这样指定你的包名: 因为它现在在默认包下,你可能知道默认包中的类在外部无法访问。所以试着这样说吧。

标签: java hibernate postgresql hibernate-mapping


【解决方案1】:

错误意味着 Hibernate 无法加载映射文件(检查代码,是 FileNotFoundException 的包装),因此您的错误在 hibernate.cfg.xml 文件中,而不是在映射中!
检查&lt;mapping file="path/to/Employee.hbm.xml" /&gt;是否正确

【讨论】:

  • HBM CFG 和类都在 src 文件夹下。所以我想它不会被需要
  • 试试 /Employee.hbm.xml
猜你喜欢
  • 2017-10-23
  • 1970-01-01
  • 2020-04-21
  • 2014-08-26
  • 2018-03-22
  • 2015-05-19
  • 2017-04-10
  • 2018-07-25
  • 1970-01-01
相关资源
最近更新 更多