休眠:object.org.hibernate.MappingException

Posted

技术标签:

【中文标题】休眠:object.org.hibernate.MappingException【英文标题】:Hibernate : object.org.hibernate.MappingException 【发布时间】:2017-09-19 00:54:19 【问题描述】:

这是我面临的异常......每当我尝试将我的对象保存在数据库中时都会发生......即在 session.save 上

Failed to create sessionFactory object.org.hibernate.MappingException: Unknown entity: com.java.learn.pojo.Employee
Apr 22, 2017 3:16:01 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://localhost/test]
Apr 22, 2017 3:16:01 AM org.hibernate.engine.jdbc.connections.internal.PooledConnections close
ERROR: Collection leak detected: there are 1 unclosed connections upon shutting down pool jdbc:mysql://localhost/test
Apr 22, 2017 3:16:34 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Learn] in context with path [/Practice] threw exception [Handler processing failed; nested exception is java.lang.ExceptionInInitializerError] with root cause
org.hibernate.MappingException: Unknown entity: com.java.learn.pojo.Employee
    at org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:620)
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1634)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:104)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:689)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:681)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:676)
    at com.java.learn.dao.DaoClass.callDatabase(DaoClass.java:29)
    at com.java.learn.service.ServiceClass.callDao(ServiceClass.java:17)
    at com.java.learn.controller.ControllerClass.personController(ControllerClass.java:26)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

这是我用来保存对象的 java 代码

try
        
            Configuration configuration = new Configuration().configure();
            StandardServiceRegistryBuilder builder =
                new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
            factory = configuration.buildSessionFactory(builder.build());
            Session session = factory.openSession();
            Transaction t = session.beginTransaction();
            Employee e = new Employee(1, "", "", 3);
            e.setFirstName("sparsh");
            session.save(e);
            t.commit();
            System.out.println("in dao");
        
        catch (Throwable ex)
        
            System.err.println("Failed to create sessionFactory object." + ex);
            factory.close();
            throw new ExceptionInInitializerError(ex);
        

这是我在项目中包含的 jar 文件

这是cfg文件

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
        <property name="hibernate.connection.driver_class">
            com.mysql.jdbc.Driver
        </property>

        <!-- Assume students is the database name -->
        <property name="hibernate.connection.url">
            jdbc:mysql://localhost/test
        </property>
        <property name="hibernate.connection.username">
            root
        </property>
        <property name="hibernate.connection.password">
            root1
        </property>
        <property name="hbm2ddl.auto">create</property>
        <property name="show_sql">true</property>
        <mapping class="com.java.learn.pojo.Employee"/>
    </session-factory>
</hibernate-configuration>

Employee.java

package com.java.learn.pojo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Table
@Entity
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 Employee(int id, String firstName, String lastName, int salary)
    
        super();
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        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;
    

请帮忙

【问题讨论】:

向我们展示员工 POJO? 添加了Employee.java 如果我们不给它,它就会把它作为类的名字......对吗? @yogidilip 不认为表名应该有任何区别,因为 hibernate 应该能够使用其命名策略推断名称,因为 name = "EMPLOYEE" 是可选的。 属性name = "EMPLOYEE"在`表映射中是可选的。 【参考方案1】:

这是 Hibernate 5 的一个问题——你不能使用 Hibernate 4 的方法进行配置。此代码不正确:

Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
factory = configuration.buildSessionFactory(builder.build());

请检查一下 https://***.com/a/32711654/3405171

【讨论】:

进行了更改...现在面临的原因是:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“type=MyISAM”附近使用正确的语法 @sparsh610 如果您使用的是@GeneratedValue,则不应设置id @v.ladynev 我最近从 4 迁移到了 Hibernate 5,但没有遇到这样的问题。感谢您的出色库 github.com/v-ladynev/fluent-hibernate @Sneh 不客气 :)。感谢您玩图书馆。可能,您使用了其他配置方法。 我删除了 id ,但仍然面临同样的问题,当我打印休眠查询时,我发现创建表 EMPLOYEE(id 整数不为空 auto_increment,first_name varchar(255),last_name varchar(255),工资整数,主键 (id)) type=MyISAM .... type isam .. 不知道它来自哪里

以上是关于休眠:object.org.hibernate.MappingException的主要内容,如果未能解决你的问题,请参考以下文章

vmware黑群晖硬盘休眠

休眠文件瘦身教程 Win10休眠文件怎么清

linux系统关闭休眠命令

惠普电脑休眠怎么唤醒

使用注解或使用休眠配置文件休眠

win10怎么把电脑休眠文件