title: Hibernate unknown entity (not missing @Entity or import javax.persistence.Entity )
body: <p>I've got a really simple class:</p>
  
  <pre><code>import javax.persistence.Column;
  import javax.persistence.Entity;
  import javax.persistence.GeneratedValue;
  import javax.persistence.GenerationType;
  import javax.persistence.Id;
  import javax.persistence.Table;
  
  @Entity
  @Table(name = "users")
  public class User {
  
      @Column(name = "firstName")
      private String firstName;
  
      @Column(name = "lastName")
      private String lastName;
  
      @Column(name = "email")
      private String email;
  
      @Id
      @GeneratedValue(strategy=GenerationType.AUTO)
      @Column(name = "id")
      private long 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 String getEmail() {
          return email;
      }
      public void setEmail(String email) {
          this.email = email;
      }
      public long getId() {
          return id;
      }
      public void setId(long id) {
          this.id = id;
      }
  }
  </code></pre>
  
  <p>I call it using this main:</p>
  
  <pre><code>public class Main {
  
      /**
       * @param args
       */
      public static void main(String[] args) {
          // TODO Auto-generated method stub
          HibernateUtil.buildSessionFactory();
          Session session = HibernateUtil.getSessionFactory().getCurrentSession();
          session.beginTransaction();
          User u = new User();
          u.setEmail("david@hello.co.uk");
          u.setFirstName("David");
          u.setLastName("Gray");
  
          session.save(u);
          session.getTransaction().commit();
          System.out.println("Record committed");
          session.close();
  
  
      }
  
  }
  </code></pre>
  
  <p>I keep getting this MappingException:</p>
  
  <pre class="lang-none prettyprint-override"><code>Exception in thread "main" org.hibernate.MappingException: Unknown entity: org.assessme.com.entity.User
      at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1172)
      at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1316)
      at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117)
      at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)
      at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
      at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)
      at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
      at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
      at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:670)
      at org.hibernate.internal.SessionImpl.save(SessionImpl.java:662)
      at org.hibernate.internal.SessionImpl.save(SessionImpl.java:658)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:601)
      at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352)
      at $Proxy4.save(Unknown Source)
      at Main.main(Main.java:20)
  </code></pre>
  
  <p>My HibernateUtil is:</p>
  
  <pre><code>import org.hibernate.SessionFactory;
  import org.hibernate.cfg.Configuration;
  import org.hibernate.service.ServiceRegistry;
  import org.hibernate.service.ServiceRegistryBuilder;
  
  public class HibernateUtil {
  
      private static SessionFactory sessionFactory;
      private static ServiceRegistry serviceRegistry;
  
      public static SessionFactory buildSessionFactory() {
          try {
              // Create the SessionFactory from hibernate.cfg.xml
              Configuration configuration = new Configuration();
              configuration.configure();
              serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();     
              return new Configuration().configure().buildSessionFactory(serviceRegistry);
          } catch (Throwable ex) {
              // Make sure you log the exception, as it might be swallowed
              System.err.println("Initial SessionFactory creation failed." + ex);
              throw new ExceptionInInitializerError(ex);
          }
      }
  
      public static SessionFactory getSessionFactory() {
          sessionFactory = new Configuration().configure().buildSessionFactory(serviceRegistry);
          return sessionFactory;
      }
  
  }
  </code></pre>
  
  <p>Does anyone have any ideas as I've looked at so many duplicates but the resolutions don't appear to work for me.  This is my hibernate.cfg.xml:</p>
  
  <pre class="lang-xml prettyprint-override"><code>&lt;?xml version='1.0' encoding='utf-8'?&gt;
  &lt;!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
  &lt;hibernate-configuration&gt;
      &lt;session-factory&gt;
          &lt;!-- Database connection settings --&gt;
          &lt;property name="connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;
          &lt;property name="connection.url"&gt;jdbc:mysql://localhost/ssme&lt;/property&gt;
          &lt;property name="connection.username"&gt;root&lt;/property&gt;
          &lt;property name="connection.password"&gt;mypassword&lt;/property&gt;
  
          &lt;!-- JDBC connection pool (use the built-in) --&gt;
          &lt;property name="connection.pool_size"&gt;1&lt;/property&gt;
  
          &lt;!-- SQL dialect --&gt;
          &lt;property name="dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;
  
          &lt;!-- Enable Hibernate's automatic session context management --&gt;
          &lt;property name="current_session_context_class"&gt;thread&lt;/property&gt;
  
          &lt;!-- Disable the second-level cache  --&gt;
          &lt;property name="cache.provider_class"&gt;org.hibernate.cache.NoCacheProvider&lt;/property&gt;
  
          &lt;!-- Echo all executed SQL to stdout --&gt;
          &lt;property name="show_sql"&gt;true&lt;/property&gt;
  
          &lt;!-- Drop and re-create the database schema on startup --&gt;
          &lt;property name="hbm2ddl.auto"&gt;update&lt;/property&gt;
  
      &lt;/session-factory&gt;
  &lt;/hibernate-configuration&gt;
  </code></pre>