Java 在Spring应用程序中配置JPA

Java 在Spring应用程序中配置JPA,java,spring,jakarta-ee,jpa,Java,Spring,Jakarta Ee,Jpa,我使用Hibernate实现将Spring配置为使用JPA。然而,我并不完全理解这个过程。我通过关注不同的博客等方式让它工作起来。我使用了EJB3.1,在那里我有一个persistence.xml。然而,在spring中,我声明了一个LocalContainer…Bean,并为它提供了一些属性,我没有persistence.xml。有人能解释一下它在春天是如何工作的吗?声明的bean是什么 <bean id="emf" class="org.springframework.orm.jpa.

我使用Hibernate实现将Spring配置为使用JPA。然而,我并不完全理解这个过程。我通过关注不同的博客等方式让它工作起来。我使用了EJB3.1,在那里我有一个persistence.xml。然而,在spring中,我声明了一个LocalContainer…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>

org.hibernate.dialogue.postgresql82dialogue

使用JPA的Spring配置有不同的风格,一种需要persistence.xml,另一种只需要bean声明(无persistence.xml)

我将在您的场景中讨论案例2:

我们需要persistence.xml的主要原因是:

  • 数据库连接详细信息
  • 被视为实体或包的Java类,在其中扫描实体
  • 其他特定于供应商的设置,如hibernate.show\u sql或类似内容
  • 现在,如果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>
    
    
    org.hibernate.dialogue.postgresql82dialogue
    
    第一个属性,dataSource已经包含数据库设置

    第二个属性,jpaVendorAdapter是特定于Spring的属性

    第三个属性,packagesToScan这是Spring的一个属性,用于扫描实体,我们可以在persistence.xml中使用“class”标记,通过提及每个类FQN来执行此操作

    第四个属性,顾名思义,JPAPProperties可以在Spring中,也可以在persistence.xml中

    e、 g

    
    
    因为Springbean中已经有了所有配置,所以不需要persistence.xml

    只需添加一个脚注:

    Spring3.1提供了另一种选择:LocalContainerEntityManagerFactoryBean,它接受“packagesToScan”属性,指定要扫描@Entity类的基本包


    希望这能回答您的疑问。

    如果您想了解更多信息,您应该分享spring的配置。@HimanshuBhardwaj完成
    <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL82Dialect" />