2016-11-27 131 views
-1

當我想保存我的對象時它會拋出未知的實體異常。休眠時使用休眠時未知的實體5 java 8

TNX提前

異常線程 「main」 org.hibernate.MappingException:未知 實體:com.simpleProgrammer.User在 org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl的.java:618) 在 org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1595) 在 org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:104) 在 有機hiber nate.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) at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:667) org.hibernate.internal.SessionImpl.save(SessionImpl.java:659)at org.hibernate.internal.SessionImpl.save(SessionImpl.java:654)at com.simpleProgrammer.Program.main(Program.java: 22)

我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> 
    <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property> 
    <property name="hibernate.connection.password">root</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/protein_tracker</property> 
    <property name="hibernate.connection.username">root</property> 
    <!-- <property name="hibernate.default_schema"></property> --> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.show_sql">true</property> 
    <property name="hibernate.hbm2ddl.auto">create</property> 
    <mapping resource="com/simpleProgrammer/User.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

我User.hbm.xml映射文件

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
            "http://www.hibernate.org/dtd/hibernate-mapping"> 
<hibernate-mapping> 
    <class name="com.simpleProgrammer.User" table="USERS"> 
     <id name="id" type="int" column="id"> 
      <generator class="identity" /> 
     </id> 
     <property name="name" column="NAME" type="string" /> 
     <component name="proteinData"> 
      <property name="total" column="TOTAL" type="int" /> 
      <property name="goal" column="GOAL" type="int" /> 
     </component> 
     <set name="history" table="USER_HISTORY"> 
      <key column="ID"/> 
      <composite-element class="com.simpleProgrammer.UserHistory"> 
       <property name="entryTime" type="date" column="ENTRY_TIME"/> 
       <property name="entry" type="string" column="ENTRY"/> 
      </composite-element> 
     </set> 
    </class> 
</hibernate-mapping> 

我progaram.java

package com.simpleProgrammer; 

import java.util.Date; 

import org.hibernate.Session; 

public class Program { 

    public static void main(String[] args) { 

     Session session = new HibernateUtilities().getSessionFactory().openSession(); 
     System.out.println("Session Opened!!!"); 
     session.beginTransaction(); 
     System.out.println("Transaction begined!"); 

     User user = new User(); 
     user.setName("Joe"); 
     user.getHistory().add(new UserHistory(new Date(), "Setting Name to Joe")); 
     user.getProteinData().setGoal(250); 
     user.getHistory().add(new UserHistory(new Date(), "Setting Goal to 250!")); 
     System.out.println("Setting user Object"); 
     session.save(user); 
     System.out.println("Saving user object on table"); 
     session.getTransaction().commit(); 
     System.out.println("Transaction Commited!"); 

     session.beginTransaction(); 
     User loadedUser = session.get(User.class, 1); 
     System.out.println(loadedUser.getName()); 
     System.out.println(loadedUser.getProteinData().getGoal()); 
     System.out.println(loadedUser.getProteinData().getTotal()); 
     loadedUser.getProteinData().setTotal(loadedUser.getProteinData().getTotal() + 50); 
     loadedUser.getHistory().add(new UserHistory(new Date(), "Added 50 Protein!")); 
     for (UserHistory history : loadedUser.getHistory()) { 
      System.out.println(history.getEntryTime().toString() + " " + history.getEntry()); 
     } 

     session.getTransaction().commit(); 
     session.close(); 
     System.out.println("Session Closed!!!"); 
     HibernateUtilities().getSessionFactory().close(); 
     System.out.println("Session Factory Closed"); 
    } 
} 

用戶類

package com.simpleProgrammer; 

import java.util.HashSet; 
import java.util.Set; 

public class User { 

    private int id; 
    private String name; 
    private ProteinData proteinData = new ProteinData(); 
    private Set<UserHistory> history = new HashSet<UserHistory>(); 

    public Set<UserHistory> getHistory() { 
     return history; 
    } 

    public void setHistory(Set<UserHistory> history) { 
     this.history = history; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public ProteinData getProteinData() { 
     return proteinData; 
    } 

    public void setProteinData(ProteinData proteinData) { 
     this.proteinData = proteinData; 
    } 
} 

here is my project structure

+0

試試這個,它爲我工作: http://stackoverflow.com/questions/33194384/exception-in-thread-main-org-hibernate-mappingexception-unknown-entity – zaggi

+0

試試這個,它爲我工作: [在此處輸入鏈接描述](http://stackoverflow.com/questions/33194384/exception-in-thread-main-org-hibernate-mappingexception-unknown-entity) – zaggi

回答

0

我想你應該檢查你的其他配置文件。 「未知實體」 意味着你的應用程序沒有找到就像路徑中的User.hbm.xml一樣。

+0

它在我添加用戶歷史記錄之前就工作了! 我認爲它的事情與它有關。 –