2016-07-01 7 views
2

Das ist meine Modellklasse (AppInfo, Userinfo)Hibernate geben unbekannte Wesen Ausnahme

@Entity 
@Table(appliesTo="appinfo") 
public class AppInfo { 

    @Id 
    @Column(name="appid") 
    private int appId; 

    @Column(name="appname") 
    private String appName; 

    @Column(name="roleid") 
    private int roleId; 

    @OneToMany(fetch=FetchType.LAZY,targetEntity=UserInfo.class,cascade=CascadeType.ALL) 
    @JoinColumn(name="Appid",referencedColumnName="appid") 
    private Set<UserInfo> userInfo; 

     // setters & getters 
} 

@Entity 
@Table(appliesTo = "userinfo") 
public class UserInfo { 

    @Id 
    @Column(name = "userid") 
    private int userId; 

    @Column(name = "username") 
    private String userName; 

      @Column(name = "hoid") 
      private String hoId; 
//setters & getters 
    } 

Meine hbm Konfigurationsdatei

<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.password">root</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/taskdb</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="show_sql">true</property> 
     <mapping class="com.myproject.hibernate.model.UserInfo.java"></mapping> 
     <mapping class="com.myproject.hibernate.model.AppInfo.java"></mapping> 
    </session-factory> 

Meine Utility-Klasse

public class UtilityAnnotation { 


       private static final SessionFactory sessionFactory = buildSessionFactory(); 

       @SuppressWarning 

s("deprecation") 
      private static SessionFactory buildSessionFactory() { 
       try { 
        // Create the SessionFactory from hibernate.cfg.xml 
        return new AnnotationConfiguration().configure().buildSessionFactory(); 
       } 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() { 
       return sessionFactory; 
      } 

      public static void shutdown() { 
       // Close caches and connection pools 
       getSessionFactory().close(); 
      } 

    } 

Und schließlich Hauptklasse

public class OneToMany { 

    public static void main(String[] args) { 
     Session session = UtilityAnnotation.getSessionFactory().openSession(); 
     session.beginTransaction(); 
     UserInfo info = new UserInfo(); 
     AppInfo ap = new AppInfo(); 

     ap.setAppId(1); 
     ap.setAppName("Check"); 
     ap.setRoleId(1); 

     info.setUserName("Grey"); 
     info.setUserId(4); 
     info.setHoneyId("4"); 

     Set<UserInfo> mys = new HashSet<UserInfo>(); 
     mys.add(info); 

     ap.setUserInfo(mys); 

     session.save(ap); 
     session.getTransaction().commit(); 
     session.close(); 
    } 
} 

wenn ich laufe die Hauptklasse Iget folgende Fehler

Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.myproject.hibernate.model.AppInfo 
    at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:693) 
    at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1485) 
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) 
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) 
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) 
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713) 
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701) 
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697) 
    at com.myproject.hibernate.practice.OneToMany.main(OneToMany.java:32) 

ich Lösung gesucht und in vielen gesagt haben, die Konfigurationsdatei Zuordnung zu ändern, in dem Klassenpfad korrekt sein sollte, aber ich habe die richtige Klasse angegebenen Pfad so Was ist der Fehler, den ich hier mache?

Ich habe auch eine separate Hauptklasse, die Informationen in userinfo fügt und das funktioniert perfekt. Ersetzen

+0

Betrachten hinzuzufügen ein Posting SSCCE - http://sscce.org/ –

Antwort

2

Wenn Sie Ihr Unternehmen mithilfe Anmerkung hinzufügen möchten, müssen Sie Ihre kommentierten Einheiten im Konfigurationsobjekt

new AnnotationConfiguration().configure().addAnnotatedClass(AppInfo.class).addAnnotatedClass(UserInfo.class).buildSessionFactory(); 

auch hinzufügen entfernen .java aus dem Mapping cl ass xml configuration Wenn Sie xml configuration verwenden

+0

Hallo, ich habe Änderungen an meiner Utility-Klasse vorgenommen zurückgeben neue AnnotationConfiguration(). Configure(). AddAnnotatedClass (AppInfo.class) .addAnnotatedClass (UserInfo.class) .buildSessionFactory (); und entfernte die .java, aber der gleiche Fehler existiert – pratt

+0

Ich habe eine andere Hauptklasse, die Daten in userinfo enthält, das funktioniert nur, wenn ich eins zu viele versuche es nicht – pratt

+0

für eins-zu-viele Problem erstellen Sie bitte eine neue Frage und poste deinen Mapping Entities Code – Saravana

1

<mapping class="com.myproject.hibernate.model.UserInfo.java"></mapping> 
    <mapping class="com.myproject.hibernate.model.AppInfo.java"></mapping> 

mit

<mapping class="com.myproject.hibernate.model.UserInfo"/> 
    <mapping class="com.myproject.hibernate.model.AppInfo"/> 
+0

Erprobter Fehler – pratt

1

Verwenden Sie Java, um Entity anstelle von XML einzuschließen, es ist wartungsfreundlicher und lesbarer für andere Entwickler.

Aktuelle Ausnahme ist aufgrund in der Mapping-Klasse XML-Konfiguration .JAVA

Wenn Sie Ihr Unternehmen mithilfe Anmerkung hinzufügen mögen, bevorzugen Ihre kommentierten Entitäten in dem Konfigurationsobjekt

new AnnotationConfiguration().configure().addAnnotatedClass(AppInfo.class).addAnnotatedClass(UserInfo.class).buildSessionFactory(); 
Verwandte Themen