【问题标题】:How exactly means partecipate in a given transaction in Spring working with JPA?使用 JPA 参与 Spring 中的给定事务究竟意味着什么?
【发布时间】:2015-06-03 07:53:48
【问题描述】:

我是 Spring 和 JPA 的新手,我正在学习 Spring Core 认证,我对学习材料中发现的这个问题有些疑问:

你是否能够在 Spring 中参与给定的事务? 与 JPA 合作?

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

一开始我解释为与现有事务交互,这是不可能的,因为事务是原子定义的。

但是他们进入文档我发现了这个信息:

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

  • 只需使用 Spring 的一个 FactoryBean 即可构建 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 对象的确切作用是什么?

Tnx

【问题讨论】:

  • 这听起来像是一个措辞可怕的问题。
  • @chrylis 事实上,我很难理解到底在问什么

标签: java spring hibernate jpa spring-data


【解决方案1】:

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

Spring JPA 还允许配置的 JpaTransactionManager 公开一个 JPA 事务到访问同一 DataSource 的 JDBC 访问代码, 前提是注册的 JpaDialect 支持检索 底层 JDBC 连接。开箱即用,Spring 提供方言 用于 EclipseLink、Hibernate 和 OpenJPA JPA 实现。看 下一节将详细介绍 JpaDialect 机制。

也检查What transaction manager should I use for JBDC template When using JPA ?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2021-08-01
    • 2015-10-29
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    相关资源
    最近更新 更多