注释类+;cfg.xml=org.hibernate.MappingException:未知实体

注释类+;cfg.xml=org.hibernate.MappingException:未知实体,hibernate,mappingexception,Hibernate,Mappingexception,这个问题在这里已经被描述了很多次,但我没有看到任何有效的建议如何消除它 下面是两个没有答案的相同问题: 我将再次描述这个问题 一个简单的教程应用程序 hibernate-core-5.3.1.Final hibernate-annotations-3.5.6-Final hibernate-jpa-2.0-api-1.0.0.Final 主类 package main; import org.hibernate.Session; import org.hibernate.SessionF

这个问题在这里已经被描述了很多次,但我没有看到任何有效的建议如何消除它

下面是两个没有答案的相同问题:

  • 我将再次描述这个问题

    一个简单的教程应用程序

    hibernate-core-5.3.1.Final

    hibernate-annotations-3.5.6-Final

    hibernate-jpa-2.0-api-1.0.0.Final

    主类

    package main;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    
    public class Main {
        public static void main(String[] args) {
            Configuration conf = new Configuration().configure();
            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
            builder.applySettings(conf.getProperties());
            ServiceRegistry registry = builder.build();
            SessionFactory sessionFactory = conf.buildSessionFactory(registry);
    
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
    
            Employee employee = new Employee();
            employee.setFirstName("John");
            employee.setLastName("Doe");
            employee.setSalary(1000000);
    
            session.save(employee);
            transaction.commit();
            sessionFactory.close();
        }
    }
    
    package main;
    
    import javax.persistence.*;
    
    @Entity
    @Table(name="EMPLOYEE")
    public class Employee {
        @Id
        @GeneratedValue
        @Column(name = "ID")
        private int id;
    
        @Column(name = "FIRST_NAME")
        private String firstName;
    
        @Column(name = "LAST_NAME")
        private String lastName;
    
        @Column(name = "SALARY")
        private int salary;
    
        public Employee() {}
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        public int getSalary() {
            return salary;
        }
    
        public void setSalary(int salary) {
            this.salary = salary;
        }
    }
    
    员工类别

    package main;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    
    public class Main {
        public static void main(String[] args) {
            Configuration conf = new Configuration().configure();
            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
            builder.applySettings(conf.getProperties());
            ServiceRegistry registry = builder.build();
            SessionFactory sessionFactory = conf.buildSessionFactory(registry);
    
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
    
            Employee employee = new Employee();
            employee.setFirstName("John");
            employee.setLastName("Doe");
            employee.setSalary(1000000);
    
            session.save(employee);
            transaction.commit();
            sessionFactory.close();
        }
    }
    
    package main;
    
    import javax.persistence.*;
    
    @Entity
    @Table(name="EMPLOYEE")
    public class Employee {
        @Id
        @GeneratedValue
        @Column(name = "ID")
        private int id;
    
        @Column(name = "FIRST_NAME")
        private String firstName;
    
        @Column(name = "LAST_NAME")
        private String lastName;
    
        @Column(name = "SALARY")
        private int salary;
    
        public Employee() {}
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        public int getSalary() {
            return salary;
        }
    
        public void setSalary(int salary) {
            this.salary = salary;
        }
    }
    
    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.dialect">org.hibernate.dialect.MySQL5Dialect</property>
            <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/world</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">root</property>
            <property name="hibernate.connection.verifyServerCertificate">false</property>
            <property name="hibernate.connection.useSSL">true</property>
            <property name="hibernate.connection.requireSSL">false</property>
            <property name="hibernate.show_sql">true</property>
            <property name="hibernate.hbm2ddl.auto">create</property>
            <property name="hibernate.format_sql">true</property>
            <mapping class="main.Employee"/>
        </session-factory>
    </hibernate-configuration>
    
    
    org.hibernate.dialogue.mysql5dialogue
    com.mysql.cj.jdbc.Driver
    jdbc:mysql://localhost:3306/world
    根
    根
    假的
    真的
    假的
    真的
    创造
    真的
    
    例外情况

    INFO:HHH10001001:连接属性:{user=root,password=**,verifyServerCertificate=false,usesssl=true,requireSSL=false}
    2018年6月26日上午10:54:38 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
    信息:HHH10001003:自动提交模式:错误
    2018年6月26日上午10:54:38 org.hibernate.engine.jdbc.connections.internal.driverManager连接ProviderImpl$PooledConnections
    信息:HH000115:休眠连接池大小:20(最小值=1)
    2018年6月26日上午10:54:38 org.hibernate.dialogue.dialogue
    信息:HH000400:使用方言:org.hibernate.dialogue.mysql5dialogue
    2018年6月26日上午10:54:39 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources
    信息:HH000476:正在执行导入脚本“org.hibernate.tool.schema.internal.exec”。ScriptSourceInputNonExistentImpl@5026735c'
    线程“main”org.hibernate.MappingException中的异常:未知实体:main.Employee
    位于org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:684)
    位于org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1692)
    位于org.hibernate.event.internal.AbstractSaveEventListener.SaveWithGenerateId(AbstractSaveEventListener.java:122)
    在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
    位于org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
    位于org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
    位于org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
    位于org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
    位于org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:709)
    位于org.hibernate.internal.SessionImpl.save(SessionImpl.java:701)
    位于org.hibernate.internal.SessionImpl.save(SessionImpl.java:696)
    在main.main.main(main.java:26)
    
    @实体
    存在

    存在映射
    class=“main.Employee”

    我请求帮助确定问题的原因。 请不要使用
    configuration.addAnnotatedClass(Employee.class)
    和创建hbm文件。 我尝试过的这些方法都很有效。 我对上述案例特别感兴趣。

    • 您使用的是hibernate 5.3.1,因此不需要hibernate-annotations-3.5.6-Final
    • 对于hibernate 5,声明如下类:

      import org.hibernate.SessionFactory;
      
      import org.hibernate.boot.MetadataSources;
      
      import org.hibernate.boot.registry.StandardServiceRegistry;
      
      import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
      
      public class HibernateUtil {
      
      private static final SessionFactory sessionFactory = 
      buildSessionFactory();
      
      private static SessionFactory buildSessionFactory() {
      
      try {
       final StandardServiceRegistry registry = new 
       StandardServiceRegistryBuilder()
              .configure() // configures settings from hibernate.cfg.xml
              .build();
      
          return new MetadataSources( registry ).buildMetadata().buildSessionFactory();
      
      }catch(Exception e) {   
      
          e.printStackTrace();
      
          throw new RuntimeException("There was an error building the factory...!");
      }
      
      }

      }

    • 在您的主要方法中:

      Session session = HibernateUtil.getSessionFactory().openSession();