如何在Spring中使用JPA参与特定事务?

4

我对Spring和JPA都比较新,在学习Spring核心认证时,我对学习资料中的这个问题有一些疑问:

在使用JPA的同时,你能否参与到一个给定的Spring事务中?

我认为答案是否定的,因为我知道JPA提供了配置选项,以便Spring可以管理事务和EntityManager,但我绝对不确定自己是否正确理解了这个问题。究竟参与到一个给定的事务中是什么意思。

一开始我将其解释为与现有事务进行交互,但这是不可能的,因为事务本质上是原子性的。

但在文档中我发现了以下信息:

要透明地参与Spring驱动的事务:

  • 只需使用Spring的FactoryBeans之一来构建EntityManagerFactory

  • 使用@PersistenceContext注入EntityManager引用

定义事务管理器:JpaTransactionManager

并展示了以下示例:

public class JpaOrderRepository implements OrderRepository {

    private EntityManager entityManager;

    @PersistenceContext
    public void setEntityManager (EntityManager entityManager) {
        this. entityManager = entityManager;
    }

    public Order findById(long orderId) {
        return entityManager.find(Order.class, orderId);
    }
}

那么这与我的原始问题有什么关系?怎么关联?

@PersistenceContext注解是什么,EntityManager对象的确切作用是什么?

谢谢


4
那听起来是一个措辞糟糕的问题。 - chrylis -cautiouslyoptimistic-
@chrylis 实际上,我有些难以理解您确切的要求。 - AndreaNobili
1个回答

0

我也正在学习认证,阅读了您的帖子后,我认为这段来自Spring文档的摘录就是这个问题的全部:

Spring JPA还允许配置的JpaTransactionManager将JPA事务公开给访问相同DataSource的JDBC访问代码,前提是注册的JpaDialect支持检索底层JDBC连接。Spring默认提供了EclipseLink、Hibernate和OpenJPA JPA实现的方言。有关JpaDialect机制的详细信息,请参见下一节。

还要检查在使用JPA时应该使用什么事务管理器来使用JBDC模板?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接