1

Here is the Exception i am facing...it occurs whenever i try to save my object in database .. i.e on 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)

Here is my java code which i am using to save the object

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);
        }

Here is the jar file i have included in my project

enter image description here

Here is the cfg file

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

please help

sparsh610
  • 1,552
  • 3
  • 27
  • 66
  • show us Employee POJO? – yogidilip Apr 21 '17 at 21:58
  • added Employee.java – sparsh610 Apr 21 '17 at 22:01
  • Where's the name of the table? `@Table(name = "EMPLOYEE")` – yogidilip Apr 21 '17 at 22:04
  • 1
    if we dont give it , it will take it as the name of class ... right ? – sparsh610 Apr 21 '17 at 22:05
  • 1
    @yogidilip don't think the table name should make any difference because hibernate should be able to infer name using its naming strategies as the name = "EMPLOYEE" is optional. – Sneh Apr 21 '17 at 22:06
  • @sparsh610 can you try configuration.addClass(Employee.class); just to find out if there is anything wrong with your xml – Sneh Apr 21 '17 at 22:06
  • 1
    The attribute `name = "EMPLOYEE"` is optional in the `Table mapping. – cнŝdk Apr 21 '17 at 22:07
  • @Sneh I am facing Mapping (RESOURCE) not found : com/java/learn/pojo/Employee.hbm.xml : origin(com/java/learn/pojo/Employee.hbm.xml) after adding configuration.addClass(Employee.class); – sparsh610 Apr 21 '17 at 22:11
  • but if i am using annotation for Employee class then there is no need to add the mapping file – sparsh610 Apr 21 '17 at 22:12
  • @sparsh610 my bad, I wanted you to try configuration.addAnnotatedClass. Give it a try :) Also if java config fixes it that means something is going wrong with the config file. – Sneh Apr 21 '17 at 22:14
  • @Sneh i have added annotated class .. now facing Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=MyISAM' at line 1 issue – sparsh610 Apr 21 '17 at 22:37

1 Answers1

1

This is a problem of Hibernate 5 — you can't use Hibernate 4 approach for configuration. This code doesn't correct:

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

Please, check this https://stackoverflow.com/a/32711654/3405171

Community
  • 1
  • 1
v.ladynev
  • 19,275
  • 8
  • 46
  • 67
  • made the changes ... now facing Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=MyISAM' at line 1 – sparsh610 Apr 21 '17 at 22:37
  • @sparsh610 You shouldn't set an `id`, if you are using `@GeneratedValue`. – v.ladynev Apr 21 '17 at 22:39
  • @v.ladynev I recently migrated to Hibernate 5 from 4 but didn't had such issue. Thanks to your awesome lib https://github.com/v-ladynev/fluent-hibernate – Sneh Apr 21 '17 at 22:40
  • @Sneh You are welcome :). Thank you for playing with the library. Probably, you used other configuration approach. – v.ladynev Apr 21 '17 at 22:42
  • i removed id , but still facing same issue , also as i printed the hibernate query i found that create table EMPLOYEE (id integer not null auto_increment, first_name varchar(255), last_name varchar(255), salary integer, primary key (id)) type=MyISAM .... type isam .. no idea from where it comes – sparsh610 Apr 21 '17 at 22:46
  • @sparsh610 You can start from here http://stackoverflow.com/questions/1459265/hibernate-create-mysql-innodb-tables-instead-of-myisam – v.ladynev Apr 21 '17 at 22:52