我可以在我的Service类中注入entityManager而无需定义任何持久性单元。
这是我的配置:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<jpa:repositories base-package="com.example"></jpa:repositories>
在我的服务类中:
@PersistenceContext
private EntityManager entityManager;
// THIS WORKS!
final Session session = entityManager.unwrap(Session.class);
是不是因为jpa:存储库?
答案 0 :(得分:0)
Spring ORM包的LocalContainerEntityManagerFactoryBean
类使这成为可能。它使用PersistenceUnitInfo类来构建PersistenceProvider的实例,然后可以将其提供给createContainerEntityManagerFactory类的EntityMangerFactory。 Hibernate实现了这个接口,以便Spring可以创建DefaultPersistenceUnitManager类的实例。
JpaVendorAdapter类是创建名为default
的persistenceUnit的类,它会查找通过类路径上的类的所有实体类。从persistence.xml
获取的相同信息已经采用了这样的替代方法,而没有物理persistence.xml文件。
最后,Spring使用@EnableJpaRepositories配置获取JPA提供程序特定的EntityManagerFactory实例。
Spring数据JPA特定<jpa:repositories base-package="...." />
或grepcode用于扫描所有使用@Repository注释的bean,以提供动态查询和其他功能。这不是一个详尽的解释,但你会看到这种“神奇”的发生。
您可以在{{3}}上找到更多信息,或下载资源以了解详情。