2016-06-06 12 views
1

Während ich an meinem Projekt arbeitete, verwendete ich ursprünglich die Hibernate Annotations @Entity, @Table, @Column, @SequenceGenerator und @GeneratedValue in meiner Java-Klasse und konnte Elemente erfolgreich hinzufügen zu meiner Oracle Datenbank.Fehler beim Umschalten von Hibernate-Annotationen in die Datei hbm.xml

Jetzt versuche ich das gleiche zu replizieren, aber eine * .hbm.xml-Datei verwenden und Probleme auftreten.

Hier ist der ursprüngliche Java-Klasse-Code mit den kommentierten Anmerkungen aus:

//@Entity 
//@Table (name="client") 
@SequenceGenerator(name="seq_client",sequenceName="BIMB2013WMMEE.seq_client", 
allocationSize=1, initialValue=1) 
public class Client { 

    //Fields 
    //@Id 
    //@GeneratedValue(strategy=GenerationType.SEQUENCE) 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_client") 
    //@Column(name="CLIENT_ID") 
    private int id; 
    //@Column(name="CLIENT_NAME") 
    private String clientName; 
    //@Column(name="CLIENT_CODE") 
    private String clientCode; 

Hier ist die entsprechende hbm.xml-Datei, die im Verzeichnis src mein Projekt befindet.

<hibernate-configuration> 

    <session-factory> 

     <!-- JDBC Database connection settings --> 
     <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
     <property name="connection.url">jdbc:oracle:thin:@endeavour.us.manh.com:1523/pso11r2f</property> 
     <property name="connection.username">BIMB2013WMMEE</property> 
     <property name="connection.password">BIMB2013WMMEE</property> 

     <!-- JDBC connection pool settings ... using built-in test pool --> 
     <property name="connection.pool_size">1</property> 

     <!-- Select our SQL dialect --> 
     <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> 

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


     <!-- Set the current session context --> 
     <property name="current_session_context_class">thread</property> 

    </session-factory> 

</hibernate-configuration> 

Schließlich ist hier der Eclipse-Fehlercode:

Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.luv2code.hibernate.demo.entity.Client 

ich keine Änderungen an die Klasse nicht machen, dass das Objekt tatsächlich schafft und in die Datenbank über eine Sitzung Hinzufügen ... muss ich?

Danke für die Hilfe !!

Antwort

0

Die XML-Datei, die Sie ist es Hibernate Konfigurationsdatei gezeigt haben, ist nicht hbm XML-Datei Sie müssen die Datei "classname.hbm.xml" für jede persistente Entität erstellen, die Sie erstellen - in Ihrem Fall ist dies Ihre Client-Klasse. Sie müssen also eine Client.hbm.xml-Datei erstellen. Danach müssen Sie diese Ressource zu Ihrer Konfigurationsdatei und Hibernate Utility-Datei hinzufügen. Vielleicht finden Sie das hilfreich. http://www.mkyong.com/hibernate/how-to-add-hibernate-xml-mapping-file-hbm-xml-programmatically/

+0

Also was ich denke ist, ich sollte meine factory = new Configuration() ändern. Configure ("hibernate.cfg.xml"). AddAnnotatedClass ("Client.class") ...... to .configure (". .. "). addResource (" Client.hbm.xml) ..... Wenn ich das tue bekomme ich einen neuen Fehler: Ausnahme im Thread "Haupt" org.hibernate.MappingException: Entität Klasse nicht gefunden: Client – AHijaouy

+0

Haben Sie diese Ressource zu Ihrer Hibernate-Konfigurationsdatei hinzugefügt? Sie wird im Lernprogramm angezeigt. Verwenden Sie . –

0

Ich denke, Sie haben möglicherweise Zuordnung Tags vergessen, um alle Ressourcen aufzulisten, die Ruhezustand in Ihrem Projekt verwenden.

Hier ist ein Beispiel:

hibernate.cfg.xml

<session-factory> 

    <!-- Database connection settings --> 
    <property name="connection.driver_class">org.h2.Driver</property> 
    <property name="connection.url">jdbc:h2:file:db/personh2db;DB_CLOSE_DELAY=-1;MVCC=TRUE</property> 
    <property name="connection.username">sa</property> 
    <property name="connection.password"/> 

    <!-- 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> 

    <mapping resource="com/example/model/Person.hbm.xml"/> 
    <mapping resource="com/example/model/Properties.hbm.xml"/> 

</session-factory> 

+0

Ich habe definitiv vergessen, die Zuordnung Tag hinzufügen, so dass geholfen! Jedoch habe ich noch einige Probleme. Zuerst bekam ich einen Fehler über eine fehlende Entitätsklasse namens Client (die ich angenommen habe, ist, weil ich das @Entity-Tag in der Java-Datei auskommentierte). Also habe ich das Entity-Tag in der Client.java-Datei neu hinzugefügt und einen neuen Fehler "Exception in thread" main "org.hibernate.AnnotationException: Kein Identifizierer für entity: com.luv2code.hibernate.demo.entity.Client angegeben ".. An diesem Punkt fühle ich mich wie ich zurück zu der Annotation Stil von Hibernate statt der .hbm.xml Stil. Gedanken? – AHijaouy

Verwandte Themen