![](/img/trans.png)
[英]Unable to build Hibernate SessionFactory - spring data/ jpa/ hibernate reverse engineering
[英]Spring Data JPA and Hibernate for creation of sessionFactory
Spring data jpa 是對 Jpa 的抽象,Spring data jpa 默認實現了 Hibernate ORM 。 為了使用休眠,我們創建了 sessionFactory。 但是為什么我們在使用 spring 數據 JPA 時不創建會話工廠?
這個問題混淆了一些與Spring、Hibernate和JPA相關的概念,讓我試着解開它們:
Spring data jpa 是對 Jpa 的抽象
在某種程度上,我猜。
Spring data jpa 默認實現 Hibernate ORM
嗯,沒有。 Spring Data 使用 Hibernate 作為 JPA API 的提供者。
為了使用休眠,我們創建 sessionFactory
嗯,是和不是。 Hibernate 可以通過兩種方式使用:
SessionFactory
、 Session
等。EntityManagerFactory
和EntityManager
Spring Data JPA 正在做后者。
為什么我們在使用 spring 數據 JPA 時不創建會話工廠?
因為 Spring Data 需要一個EntityManagerFactory
。 它不使用SessionFactory
。
在 Spring 中,這通常意味着您需要配置一個LocalContainerEntityManagerFactoryBean
。 使用 Spring Boot 時,這是自動為您完成的 - 請參見此處:
@Bean
@Primary
@ConditionalOnMissingBean({ LocalContainerEntityManagerFactoryBean.class, EntityManagerFactory.class })
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder factoryBuilder) {
Map<String, Object> vendorProperties = getVendorProperties();
customizeVendorProperties(vendorProperties);
return factoryBuilder.dataSource(this.dataSource).packages(getPackagesToScan()).properties(vendorProperties)
.mappingResources(getMappingResources()).jta(isJta()).build();
}
@ConditionalOnMissingBean({ LocalContainerEntityManagerFactoryBean.class, EntityManagerFactory.class })
注釋的作用是,僅當您自己沒有提供這樣的 bean 時,它才會創建一個LocalContainerEntityManagerFactoryBean
。 這意味着您可以提供自己的LocalContainerEntityManagerFactoryBean
,如果需要,它將被使用。
此外,如果您要在沒有 Spring Boot 的情況下使用 Spring Data JPA,則必須自己提供LocalContainerEntityManagerFactoryBean
,否則 Spring Data 將無法工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.