当前位置: 首页 > 知识库问答 >
问题:

SQL/Hibernate/Spring Transactions之间的区别

印成天
2023-03-14

我试图理解事物是如何运作的。我分开理解它们,但无法了解全貌。

在较低的级别,使用SQL查询在数据库内部执行:

start transaction
insert A
insert B
commit

在更高的级别上,有Hibernate或任何其他JPA提供程序。事情需要手动管理(我没有放置try/catch/roolback以使事情更易于阅读):

public saveAandB()
    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();
    session.save(A);
    session.save(B);
    session.getTransaction().commit();
    session.close();

最后,在更高的层次上,有Spring交易:

@Transactional
public void save(A,B) {
    saveA(A);
    saveB(B);
}

好的,我现在正在努力理解它们之间的联系:

>

  • 使用@Transactional,Spring在我的服务开始时创建一个事务(使用从业务服务创建的代理)。

    使用Hibernate,我不再需要创建新的会话对象。我需要使用getSession()而不是openSession()我可以有单独的saveA()和saveB()方法,它们将在同一事务中执行(因为getSession()将返回相同的会话)

    我不需要管理session.getTransaction()。commit();在Hibernate层中。当我完成saveA()方法时,我进入以< code>getSession()开头的saveB()方法。我从saveA()方法中得到完全相同的会话。当我的save(A,B)方法完成时,我的事务被提交,从而终止会话。

    这是正确的吗?

  • 共有1个答案

    孔深
    2023-03-14

    或多或少,是的。但请注意,JDBC 默认使用事务,即每个语句都在事务中运行,因此不需要显式的“启动事务”调用。

     类似资料:
    • 问题内容: 但没人回答我的下一个问题。经典的hibernate方法使用和JPA 实现之间有什么区别?我听说此JPA实现使用并像包装器一样工作,这是真的吗? 问题答案: 确实。 JPA只是一个API,允许您从使用的持久层中进行抽象。Hibernate提供了充当接口的实现,它使用与Hibernate 相同的基础方法。 这个想法是,例如,您可以将实现切换到Eclipse Link,而不必更改任何源代码。

    • 本文向大家介绍SQL和PL / SQL之间的区别,包括了SQL和PL / SQL之间的区别的使用技巧和注意事项,需要的朋友参考一下 SQL,结构化查询语言是一种用于创建,维护和检索关系数据库的标准数据库语言,而PL / SQL是SQL的过程语言扩展,它扩展了SQL并提供了过程功能。 以下是SQL与PL / SQL之间的重要区别。 序号 键 的SQL PL / SQL 1 定义 SQL,是数据库的结

    • 本文向大家介绍JDBC和Hibernate之间的区别,包括了JDBC和Hibernate之间的区别的使用技巧和注意事项,需要的朋友参考一下 JDBC是Java数据库连接的首字母缩写。它用于将您的应用程序连接到数据库和事务。它是一个开源Java api。   Hibernate还用于将您的应用程序连接到数据库并执行与数据库相关的事务,但是使用不同的方法。它有一个对象关系库,该库将java的对象映射到

    • 本文向大家介绍SQL和NoSQL之间的区别,包括了SQL和NoSQL之间的区别的使用技巧和注意事项,需要的朋友参考一下 众所周知,SQL和NoSQL都是数据库的类型,根据它们的实现和性质,它们都被分为两种类型。 以下是SQL和NoSQL之间的重要区别。 序号 键 的SQL NoSQL 1 类型 SQL数据库通常被归类为关系数据库,即RDBMS。 而NOSQL数据库被称为非关系数据库或分布式数据库。

    • 问题内容: 我的问题很简单:Spring jdbcTemplate和Hibernate之间的主要区别是什么?我们应该考虑使用其中一种的主要原因是什么? 谢谢 问题答案: Hibernate是一个非常庞大的解决方案,具有数据持久性和ORM(包括JPA实现)。另外,还定义了许多方法来管理Hibernate中的实体,如何持久化,事务等。在Hibernate中,您可以使用SQL,HQL或Java批注。JD

    • 问题内容: SQL解释逻辑运算符和的方式是否有所不同? 问题答案: 对于mySQL:手册未明确说明,但它们被列为相同: AND, && 逻辑与。如果所有操作数都不为零且不为NULL,则计算为1;如果一个或多个操作数为0,则计算为0,否则返回NULL。 该运算符优先级页面也没什么distiction。