2016-07-05 72 views
0

之前將其標記複製,請閱讀以下說明:錯誤:異常線程「main」 org.hibernate.MappingException:未知實體:com.hibernate.demo.model.Contact

我已經嘗試了所有給定類似問題中的答案-

  1. 我的導入爲@Entity是正確的:import javax.persistence.Entity;
  2. 映射爲在hibernate.cfg.xml實體存在
  3. 類是從PKG水平映射:「com.hibernate.demo.model.Contact」
  4. AnnotationConfiguration也沒有解決問題。
  5. 所有其他的第二到第三最佳答案也被嘗試過。

背景:我創建了一個春天啓動項目,我想,我正在使用H2 DB和我面臨的學習休眠>未知實體:com.hibernate.demo.model.Contact

I have verified that mapping of the class is present in hibernate.cfg.xml

<mapping class="com.hibernate.demo.model.Contact"/> 

I have also verified that mapping has full pkg level mapping path

這是我的hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?> 

<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 

    <session-factory> 

     <!-- Database connection settings --> 
     <property name="connection.driver_class">org.h2.Driver</property> 
     <property name="connection.url">jdbc:h2:./data/contactmgr</property> 


     <property name="connection.username">sa</property> 


     <property name="hibernate.default_schema">PUBLIC</property> 

     <!-- JDBC connection pool (use the built-in) --> 
     <property name="connection.pool_size">1</property> 

     <!-- SQL dialect --> 
     <property name="dialect">org.hibernate.dialect.H2Dialect</property> 

     <!-- Disable the second-level cache --> 
     <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> 

     <!-- Echo all executed SQL to stdout --> 
     <property name="show_sql">true</property> 

     <!-- Drop and re-create the database schema on startup --> 
     <property name="hbm2ddl.auto">create</property> 

     <property name="show_sql">true</property> 

     <mapping class="com.hibernate.demo.model.Contact"/> 

    </session-factory> 

</hibernate-configuration> 

我Application.java主類: -

package com.hibernate.demo; 



import java.io.IOException; import java.io.RandomAccessFile; import java.nio.channels.FileLock; 

import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; 

import com.hibernate.demo.model.Contact; 

public class Application { 

    //Session factory 
    private static final SessionFactory sessionFactory = buildSesssionFactory(); 

     public static void main(String[] args) throws Exception { 

     System.out.println("Session factory"); 
     Contact contact = new Contact.ContactBuilder("Bob", "Marley").withEmail("[email protected]").withPhone(5859789733L).build(); 

     //Open a Session 
     System.out.println("Open a Session"); 
     Session session = sessionFactory.openSession(); 

     //Begin a Transaction 
     System.out.println("Begin a Transaction"); 
     session.beginTransaction(); 


     //Use the session to save the contact 
     System.out.println("Use the session to save the contact"); 
     try{ 
     session.save(contact); 
     } catch(Exception e) { 
      // Close the session 
      shutdown(); 
      throw e; 

     } 
     //Commit the transaction 
     System.out.println("Commit the transaction"); 
     session.getTransaction().commit(); 


     // Close the session 
     System.out.println("Close the session"); 
     session.close(); 

    } 

    private static SessionFactory buildSessionFactory() 
    { 

     try 
     { 
     if (sessionFactory == null) 
     { 
      Configuration configuration = new Configuration().configure(Application.class.getResource("/hibernate.cfg.xml")); 
      StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder(); 
      serviceRegistryBuilder.applySettings(configuration.getProperties()); 
      ServiceRegistry serviceRegistry = serviceRegistryBuilder.build(); 
      sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
     } 
     return sessionFactory; 
     } catch (Throwable ex) 
     { 
     System.err.println("Initial SessionFactory creation failed." + ex); 
     throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() 
    { 
     return sessionFactory; 
    } 

    public static void shutdown() 
    { 
     getSessionFactory().close(); 
    } 

} 

我做所有正確的事情,我已經檢查了

@Entity import has right package

package com.hibernate.demo.model; 

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

@Entity 
public class Contact { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @Column 
    private String firstName; 

    @Column 
    private String lastName; 

    @Column 
    private String email; 

    @Column 
    private Long phone; 

    public Contact() { 
    } 

    public Contact(ContactBuilder contactBuilder) { 
     this.firstName = contactBuilder.firstName; 
     this.lastName = contactBuilder.lastName; 
     this.email = contactBuilder.email; 
     this.phone=contactBuilder.phone; 
    } 

    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 String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public Long getPhone() { 
     return phone; 
    } 

    public void setPhone(Long phone) { 
     this.phone = phone; 
    } 

    @Override 
    public String toString() { 
     return "Contact [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", email=" + email 
       + ", phone=" + phone + "]"; 
    } 

    public static class ContactBuilder { 

     private String firstName; 

     private String lastName; 

     private String email; 

     private Long phone; 

     public ContactBuilder(String firstName, String lastName) { 
      this.firstName = firstName; 
      this.lastName = lastName; 
     } 

     public ContactBuilder withEmail(String email) { 
      this.email = email; 
      return this; 

     } 

     public ContactBuilder withPhone(Long phone) { 
      this.phone = phone; 
      return this; 

     } 

     public Contact build() { 

      return new Contact(this); 
     } 

    } 

} 
+0

當您使用註釋時,在'hibernate.cfg.xml'中需要''嗎? –

+0

是的,我正在看其他例子,他們也做了同樣的事情。 – Shek

+0

我找到了一個例子,並沒有使用這個標籤:http://www.tutorialspoint.com/hibernate/hibernate_annotations.htm –

回答

0
configuration.addAnnotatedClass(Contact.class); 

解決問題,這是奇怪,因爲這意味着

<mapping class="com.contact.model.Contact"/> 

並沒有爲你做。我不喜歡xml配置,很好的解決方案。

相關問題