我正在使用Hibernate实现将Spring配置为使用JPA。但是我完全不理解这个过程。我已经通过跟随不同的博客等工作了。我使用了EJB 3.1,并且我有一个persistence.xml。但是在春天我声明了一个LocalContainer ... Bean并为它提供了一些属性,而且我没有persistence.xml。有人可以解释它在Spring中是如何工作的以及声明的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>
答案 0 :(得分:0)
Spring配置有不同版本的JPA,一个需要persistence.xml,另一个需要bean声明(没有persistence.xml)。
我将在你的场景中讨论案例2:
我们想要一个persistence.xml的主要原因是由于以下原因:
现在,如果spring提供了一种在bean配置中一起提及所有这些内容的方法,那么就不需要拥有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中通过使用“class”标签来提及每个类FQN。
第四个属性,顾名思义,jpaProperties可以在Spring中,也可以在persistence.xml中
e.g。
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL82Dialect" />
由于您已经拥有Spring bean中的所有配置,因此无需使用persistence.xml
只需添加FootNote:
Spring 3.1提供了一个替代方案:LocalContainerEntityManagerFactoryBean,它接受'packagesToScan'属性,指定要扫描@Entity类的基础包。
希望这可以回答您的问题。