Spring配置文件示例:
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"ref="entityManagerFactory"/>
<property name="jpaDialect"ref="jpaDialect"/>
</bean>
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
....
</bean>
和persistence.xml jpa文件:
<persistence-unit name="EmployeeService">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
</persistence-unit>
如您所见,jpa提供者相关信息设置了3次。在事务管理器bean、实体管理器工厂bean和持久性单元配置中:
<property name="jpaDialect"ref="jpaDialect"/>
...
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
...
<provider>org.hibernate.ejb.HibernatePersistence</provider>
但实际上在我的项目中,我只配置了带有提供者的持久性单元。它起作用了。
所以我的问题是提供商、方言和供应商选项之间有什么区别?我必须全部设置吗?或者,我可以跳过其中一些?例如,我是否可以设置为EntityMangerFactory - Hibernate的供应商、事务管理器- Eclipse中的方言以及持久性单元配置中的提供者——比如TopLink。
我不清楚。请解释一下。
将尝试逐行向您解释:
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
//Should ideally be
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
class=“org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter”/
对于您声明的第二个 bean:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"ref="entityManagerFactory"/>
<property name="jpaDialect"ref="jpaDialect"/>
</bean>
你告诉'Spring'配置一个事务管理器
,其属性是entityManagerFactory
和jpaDialect
。由于这些属性必须特定于Hibernate
,因此根据这些属性进行设置。entityManagerFactory
和 jpaDialect
现在专门设置为Hibernate
(或供应商)。
至于第三颗豆子
<property name="jpaDialect"ref="jpaDialect"/>
...
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
...
<provider>org.hibernate.ejb.HibernatePersistence</provider>
这
简而言之,您需要配置这些,以便告诉spring应该使用哪个ORM功能。
您的应用程序只配置持久性和提供程序的原因是,供应商适配器通过
JpaVendorAdapter
中的getPersistenceProvider
自动传递提供的持久性,即Hibernate持久性
。
修改文档以理解这些类是如何相互联系的。
编辑:正如@TheKojuEffect所指出的,第一个bean的理想形式应该是:
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
谢谢。错过了
供应商适配器
。
您可以参考:
Hibernate Jpa方言
Hibernate VendorAdapter
Hibernate持久性
希望对您有所帮助。:)
问题内容: 弹簧配置文件示例: 和persistence.xml jpa文件: 如您所见,与jpa提供程序相关的信息已设置3次。在事务管理器bean,实体管理器工厂bean和持久性单元配置中: 但是实际上在我的项目中,我仅使用提供程序配置了持久性单元。而且有效。 所以我的问题是提供商,方言和卖方选项之间有什么区别?我必须全部设置它们,还是可以跳过其中一些?例如,我可以设置为EntityManger
问题内容: 我正在用硒编写以下代码,并且显示以下错误,请让我知道问题出在哪里。 导入org.testng.annotations.DataProvider; 导入org.testng.annotations.Test; 错误: 失败:testData org.testng.internal.reflect.MethodMatcherException:数据提供者不匹配方法:testData([Pa
问题内容: 有人可以向我解释差异吗? Provisioner-在docker中安装,运行,拉出容器中的一项工作。 提供程序-是运行VM的东西。即VBox运行ubuntu OS映像。 Docker如何成为提供者?它直接运行一些docker镜像吗?如果我在Windows上,必须有一些boot2docker的隐藏用法,对不对?我什么时候使用每个? 问题答案: Docker Provisioner帮助准备
我正在尝试为drools会话配置JPA持久性(代码来自drools文档) > 我在pom.xml中添加了drools-persistence-jpa、Bitronix事务管理器和com.h2database依赖项 我在“src/META-INF”中的Eclipse项目中创建了一个META-INF文件夹作为Source-Folder。 [...]EntityManagerFactory emf=pe
提供者(Provider) 是一个连接以太坊网络的抽象,用与查询以太坊网络状态或者发送更改状态的交易。 EtherscanProvider 和 InfuraProvider 提供连接公开的第三方节点服务提供商,无需自己运行任何以太坊节点。 JsonRpcProvider 和 IpcProvider 允许连接到我们控制或可以访问的以太坊节点(包括主网,测试网,权威证明(PoA)节点或Ganache)
服务提供者是 laravel 框架的重要组成部分,承载着各种服务,自定义的应用以及所有 Laravel 的核心服务都是通过服务提供者启动。本文将会介绍服务提供者的源码分析,关于服务提供者的使用,请参考官方文档 :服务提供者。 服务提供者的注册 服务提供者的启动由类 IlluminateFoundationBootstrapRegisterProviders::class 负责,该类用于加载所有服务