hibernate中JTA、JPA和Plain JDBC的区别

Posted

技术标签:

【中文标题】hibernate中JTA、JPA和Plain JDBC的区别【英文标题】:Difference between JTA, JPA and plain JDBC in hibernate 【发布时间】:2011-04-23 15:22:21 【问题描述】:

JTAJPAPlain JDBC 在 Hibernate 方面有什么区别?

【问题讨论】:

【参考方案1】:

为了存在差异,应该有一些共同点,除了与数据库相关(尽管 JTA 不仅如此)之外,它们没有更多共同点:

JPA 是 Java 对象关系映射的标准 - 它指定一组注解和一个接口 -EntityManager 以对映射对象执行持久性操作。 Hibernate 实现了 JPA 标准

plain JDBC 是一种用于访问数据库的技术。它是 Hibernate 实际用于执行数据库操作的“幕后”。它使用 JDBC 向数据库发送查询。

JTA 是一个事务 API,在 Hibernate 中是可选的。它处理(逻辑上)事务行为。

【讨论】:

那么在使用实体管理器时,JTA 负责回滚和提交?所以 JPA 正在使用 JTA 吗?或者当您说 2 个数据库副本时使用 JTA 吗?请回答我很困惑 In order for a difference to exist, there should be something in common - 这是什么想法或事实? @Ced 看看下面的答案。 [答案链接:***.com/a/59304566/7729614]【参考方案2】: JDBC 是用于数据库连接的 Java 标准。 JPA 将 Java 开发人员与 JDBC 和数据库操作的内部工作隔离开来。 Hibernate、EclipseLink、OpenJPA 和 Data Nucleus 是著名的 JPA 实现。 JTA 是事务的标准,允许管理多个数据库之间的多个事务。

JPA 使用 JDBC 进行数据库连接和 SQL 相关 操作,并且 - 可选 - 使用 JTA 进行委派 向其分发事务管理详细信息。

【讨论】:

【参考方案3】:

JPA(Java Persistence API)是用于在关系数据库中存储、访问和管理 Java 对象的 Java ORM 标准/规范。 Hibernate 是 Java Persistence API (JPA) 规范的实现。

JTA(Java 事务 API)是分布式事务的 Java 标准/规范。当您的事务跨越多个连接/数据库/资源​​时,它就会出现。 Atomikos 是 JTA 的一个实现。 (像 IBM Websphere 这样的应用服务器有自己的 JTA 实现。)

【讨论】:

以上是关于hibernate中JTA、JPA和Plain JDBC的区别的主要内容,如果未能解决你的问题,请参考以下文章

@Transactional

未在 JPA 中定义非 jta 数据源

Spring/JTA/JPA DAO 集成测试不回滚?

不使用事务、传播支持和 OpenEntityManager 模式的 JPA 行为不一致

如何在 Tomcat 6 中为 Hibernate 使用 JTA 支持?

Hibernate体系结构