2009-10-31 6 views
9

in meiner applicationContext.xml, wie ich XML auf POJO zuordnen. Wie man Verzeichnis zu Klassendatei abbildet, ohne dass man XML erstellen muss?Spring + Hibernate Mapping-Klasse ohne XML

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
<property name="mappingResources"> 
      <list> 
       <value>com/custompackage/custom/spi/hibernate3/HibernateCurrentStep.hbm.xml</value> 
       <value>com/custompackage/custom/spi/hibernate3/HibernateHistoryStep.hbm.xml</value> 
       <value>com/custompackage/custom/spi/hibernate3/HibernatecustomEntry.hbm.xml</value> 
        <value>user/custom/hibernate3/PropertySetItemImpl.hbm.xml</value> 
        <value>com/custompackage/user/provider/hibernate3/user/impl/HibernateGroupImpl.hbm.xml</value> 
        <value>com/custompackage/user/provider/hibernate3/user/impl/HibernateUserImpl.hbm.xml</value> 
      </list> 
     </property> 


     <property name="hibernateProperties"> 
      ..... 
     </property> 
     <property name="dataSource"> 
      <ref bean="dataSource" /> 
     </property> 

    </bean> 

Antwort

23

Und Sie können die Dinge weiter vereinfachen, indem

<property name="annotatedClasses"> 
    <list> 
     <value>com.mycompany.sample.domain.Order</value> 
     <value>com.mycompany.sample.domain.LineItem</value> 
     ... 
    </list> 
</property> 

zu

<property name="packagesToScan" value="com.mycompany.sample.domain" /> 

in Ihrem AnnotationSessionFactoryBean so jetzt alle Klassen mit Anmerkungen versehen mit @Entity im com.mycompany.sample.domain Paket Umwandlung automatisch abgeholt werden.

+0

Worin sollte ich Klassenzuordnung in meine AnnotationSessionFactoryBean konvertieren? –

+0

@JiayiZhou Können Sie es ausarbeiten, ich verstehe nicht ganz, was Sie fragen. –

+0

Wenn ich in einer meiner Entitäten eine Eigenschaft hinzufüge, die OneToOne einer anderen Entität zuordnen. Was sollte ich in der Spring Framework xml-Konfiguration hinzufügen, damit es funktioniert? Sie können die Details meiner Frage hier überprüfen: http://stackoverflow.com/questions/40956208/how-to-configure-hibernate-onetoone-mapping-using-spring-framework –

17

Stattdessen XML-Mapping-Dateien zu verwenden, können Sie die Hibernate Annotations Bibliothek verwenden, die auf Java 5 Annotationen basiert.

Wie üblich, müssen Sie Ihre Ausdauer Klassen in der Hibernate-Konfigurationsdatei (in der Regel hibernate.cfg.xml) erklären, wenn Sie das <mapping> Element verwenden, um Ihre persistenten Klassen deklarieren:

<hibernate-configuration> 
     <session-factory> 
     <mapping class="com.mycompany.sample.domain.Order"/> 
     <mapping class="com.mycompany.sample.domain.LineItem"/> 
     </session-factory> 
    </hibernate-configuration> 

Wenn Wenn Sie das Spring-Framework verwenden, können Sie eine Annotation-basierte Hibernate-Sitzungsfactory mithilfe der AnnotationSessionFactoryBean-Klasse einrichten, wie hier gezeigt:

+0

Ihre Bean-Deklaration sollte im DispatcherServlet-Kontext platziert werden? Oder in einer anderen Spring Framework-Konfigurationsdatei? Und wenn ich meine Persistenzklassen in hibernate.cfg.xml deklariert habe, sollte ich auch eine Annotation-basierte Hibernate-Sitzungsfactory in Spring Security einrichten? – woyaru

5

Sie können Anmerkungen zu Ihrer Klasse verwenden, obwohl ich für Hibernate nicht sicher bin, ob etwas eingebaut ist (für den Einsatz im Frühling). This thread sollte helfen, wenn Sie noch mehr Technologie vermeiden möchten, aber Sie könnten auch Java Persistence Annotations (JPA) zusammen mit Hibernate verwenden, um das gleiche Ziel zu erreichen.

Here's ein gutes Tutorial für die Verwendung von JPA + Hibernate + Spring.

3

@Pascal Thivent gibt einen sehr guten Start zu dem, was Sie tun möchten. Für jede Entitätsklasse müssen Sie sie mit Anmerkungen versehen. Dies ist die Dokumentation, die die annotations in Hibernate explinieren.

z.B. Aus der Dokumentation:

@Entity 
    public class Flight implements Serializable { 
    Long id; 

    @Id 
    public Long getId() { return id; } 

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

Also zusätzlich zu dem, was von @Pascal Thivent erwähnt wurde, sollten Sie alles, was Sie bekommen müssen.

Verwandte Themen