2013-04-16 4 views
0

Я настраиваю Spring для использования JPA с помощью реализации Hibernate. Однако я не понимаю этот процесс полностью. Я получил его для работы, следуя различным блогам и т. Д. Я использовал EJB 3.1, и там у меня был persistence.xml. Однако весной я объявил LocalContainer ... Bean и предоставил некоторые свойства ему, и у меня нет persistence.xml. Может ли кто-нибудь объяснить, как это работает весной и что такое объявленный bean-компонент?Настройка приложения JPA в Spring

<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
    <property name="packagesToScan" value="com.company.domain" /> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       org.hibernate.dialect.PostgreSQL82Dialect 
      </prop> 
     </props> 
    </property> 
</bean> 
+0

Вы должны делиться конфигурациями пружины, если хотите понять. –

+0

@HimanshuBhardwaj Done – LuckyLuke

ответ

0

Существуют различные ароматы конфигурации Spring с JPA, один из которых требует persistence.xml и другой, который требует только объявления Bean (нет persistence.xml).

Я собираюсь взяться за дело-2 в вашем сценарии:

Основными причинами мы хотим, чтобы persistence.xml из-за следующих причин:

  1. детали подключения к базе данных.
  2. Классы Java, которые рассматриваются как объекты или пакеты для сканирования объектов.
  3. Другие настройки, такие как hibernate.show_sql или подобные вещи.

Теперь, если пружина дает возможность упомянуть обо всем этом вместе в конфигурациях фасоли, тогда нет необходимости иметь persistence.xml.

В случае ваших определений bean-компонентов, проломите его.

<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
    <property name="packagesToScan" value="com.company.domain" /> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       org.hibernate.dialect.PostgreSQL82Dialect 
      </prop> 
     </props> 
    </property> 
</bean> 

Первое свойство, dataSource уже содержит настройки базы данных.

Второго свойство, jpaVendorAdapter этого свойство специфично для Spring

Третьего свойства, packagesToScan этого свойства Spring для поиска лиц, это либо мы делаем в persistence.xml с помощью тегов «класса», упоминая каждый класс FQN.

Четвертое свойство, jpaProperties как следует из названия может быть либо весной или в persistence.xml

например

<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL82Dialect" /> 

Поскольку у вас есть все конфигурации уже в Spring бин, нет необходимости иметь persistence.xml

Просто добавить сноску:

Spring 3.1 предоставляет альтернатива: LocalContainerEntityManagerFactoryBean , который принимает свойство packageToScan, указывая базовые пакеты для сканирования классов @Entity.

Надеюсь, что ответьте на ваши вопросы.

Смежные вопросы