класс отображения Spring + Hibernate без XML - PullRequest
10 голосов
/ 31 октября 2009

в моем 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 ]

24 голосов
/ 01 ноября 2009

И вы можете еще больше упростить вещи, преобразовав

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

до

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

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

17 голосов
/ 31 октября 2009

Вместо использования файлов сопоставления XML вы можете использовать библиотеку Hibernate Annotations , основанную на аннотациях 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, вы можете настроить фабрику сеансов Hibernate на основе аннотаций, используя класс 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>
5 голосов
/ 31 октября 2009

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

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

3 голосов
/ 31 октября 2009

@ Pascal Thivent дает очень хорошее начало тому, что вы хотите сделать. Для каждого класса сущностей вам нужно будет их аннотировать. Это документы, которые объясняют аннотации в 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, вы должны получить все, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...