класс отображения spring+hibernate без xml

в моем applicationContext.xml, вот как я сопоставляю xml с POJO. как сопоставить каталог с файлом класса без необходимости создания 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>

4 ответов


и вы можете еще больше упростить вещи, конвертируя

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

to

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

в своем AnnotationSessionFactoryBean Итак, теперь все классы аннотированы @Entity на com.mycompany.sample.domain пакет будет автоматически подобрали.


вместо использования файлов сопоставления XML можно использовать Hibernate Аннотации библиотека, основанная на аннотациях Java 5.

как обычно, вам нужно будет объявить классы сохраняемости в файле конфигурации Hibernate (обычно hibernate.cfg.xml), Если вы используете <mapping> элемент для объявления ваших постоянных классов:

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

если вы используете Spring framework, вы можете настроить фабрику сеансов гибернации на основе аннотаций с помощью AnnotationSessionFactoryBean класс, как показано ниже:

  <!-- Hibernate session factory -->
  <bean id="sessionFactory" 
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
   <property name="dataSource">
     <ref bean="dataSource"/>
   </property>
   <property name="hibernateProperties">
     <props>
       <prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop>
       <prop key="hibernate.hbm2ddl.auto">create</prop>
       ...
     </props>
   </property>
   <property name="annotatedClasses">
     <list>
       <value>com.mycompany.sample.domain.Order</value>
       <value>com.mycompany.sample.domain.LineItem</value>
       ...
     </list>
   </property>
 </bean>

вы можете использовать аннотации в своем классе, хотя для Hibernate я не уверен, что есть что-то встроенное (для использования весной). этой теме должно помочь, если yo хочет избежать еще больше технологий, но вы также можете использовать Java Persistence Annotations (JPA) совместно с Hibernate для достижения той же цели.

здесь хороший учебник по использованию JPA + Hibernate + Spring.


@Pascal Thivent дает очень хорошее начало тому, что вы хотите сделать. Для каждого класса Entity вам нужно будет их аннотировать. Это документы, которые expalin в Hibernate аннотации.

например, из документов:

   @Entity
  public class Flight implements Serializable {
    Long id;

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

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

таким образом, в дополнение к тому, что было упомянуто @Pascal Thivent, вы должны получить все, что вам нужно.