Java 冬眠,如果beginTransaction赢了会发生什么;不能用吗?
我使用hibernate 5.2连接到Java 冬眠,如果beginTransaction赢了会发生什么;不能用吗?,java,sql,hibernate,session,transactions,Java,Sql,Hibernate,Session,Transactions,我使用hibernate 5.2连接到SQLite库。我创建了一个新的会话,并在关闭会话后使用了会话.createNativeQuery(“我的sql”).executeUpdate()。一切正常,但我遇到了几个例子,在创建会话后,它们开始事务,执行SQL操作,提交事务,然后关闭会话。但并非所有在线示例中都包含事务,没有它我的代码运行良好 这让我好奇: 为什么我们需要使用事务 如果我们不这样做会发生什么 最重要的是,在哪些情况下需要使用,在哪些情况下需要使用 不是吗 我使用1为什么我们需要使
SQLite
库。我创建了一个新的会话
,并在关闭会话后使用了会话.createNativeQuery(“我的sql”).executeUpdate()
。一切正常,但我遇到了几个例子,在创建会话后,它们开始事务
,执行SQL
操作,提交事务
,然后关闭会话
。但并非所有在线示例中都包含事务
,没有它我的代码运行良好
这让我好奇:
- 为什么我们需要使用
事务
- 如果我们不这样做会发生什么
- 最重要的是,在哪些情况下需要使用,在哪些情况下需要使用
不是吗
我使用1
为什么我们需要使用事务?
->您所做的只是一个简单的更新,如果有多个更新并且您希望事务具有ACID性质,则使用事务管理
如果我们不这样做会发生什么?
->如果有多个update语句,其中一个抛出异常,则数据将不一致 为什么我们需要使用事务?
->您所做的只是一个简单的更新,如果有多个更新并且您希望事务具有ACID性质,则使用事务管理
如果我们不这样做会发生什么?
->如果有多个update语句,其中一个抛出异常,则数据将不一致 您可以尝试将hibernate与JDBC关联起来,您将得到一些关于事务的提示
在JDBC中,您只需打开一个连接即可开始工作,最后可以提交或回滚
但是,如果您有许多不同的并行任务,它们可能相互依赖或独立,该怎么办呢。然后,您可能需要分别提交/回滚每个任务,或者在任何任务失败时回滚
for example
Big Task :
small task1
small task2
small task3 and many more
如果任何小任务失败,请回滚大任务。这可能是许多业务需求之一
在JDBC中,连接接口提供了commit()和rollback()方法
在jpa/hibernate中,事务接口提供了commit()和rollback()方法
因此,一个会话可以有许多依赖或独立的事务
下面是org.hibernate.Transaction的文档
Allows the application to define units of work, while maintaining
abstraction from the underlying transaction implementation (eg. JTA, JDBC).
A transaction is associated with a Session and is usually
initiated by a call to org.hibernate.Session.beginTransaction().
A single session might span multiple transactions since the notion of a session
(a conversation between the application and the datastore) is of coarser granularity
than the notion of a transaction. However, it is intended that there be at most
one uncommitted transaction associated with a particular Session at any time.
这也可能对你有所帮助
您可以尝试将hibernate与JDBC关联起来,您将得到一些关于事务的提示
在JDBC中,您只需打开一个连接即可开始工作,最后可以提交或回滚
但是,如果您有许多不同的并行任务,它们可能相互依赖或独立,该怎么办呢。然后,您可能需要分别提交/回滚每个任务,或者在任何任务失败时回滚
for example
Big Task :
small task1
small task2
small task3 and many more
如果任何小任务失败,请回滚大任务。这可能是许多业务需求之一
在JDBC中,连接接口提供了commit()和rollback()方法
在jpa/hibernate中,事务接口提供了commit()和rollback()方法
因此,一个会话可以有许多依赖或独立的事务
下面是org.hibernate.Transaction的文档
Allows the application to define units of work, while maintaining
abstraction from the underlying transaction implementation (eg. JTA, JDBC).
A transaction is associated with a Session and is usually
initiated by a call to org.hibernate.Session.beginTransaction().
A single session might span multiple transactions since the notion of a session
(a conversation between the application and the datastore) is of coarser granularity
than the notion of a transaction. However, it is intended that there be at most
one uncommitted transaction associated with a particular Session at any time.
这也可能对你有所帮助
让我们定义什么是事务-基本上它是原子工作单元
有两种类型的事务管理或事务划分(将划分视为启动事务、提交或回滚事务):CMT(容器管理的事务)-由底层容器为您管理(JTA)和BMT(bean管理的事务)-事务划分由开发人员自己以编程方式管理。所以,如果您在任何示例中看到,事务
是通过编程方式获得并提交或回滚的,这就是BMT的示例,也就是说,管理事务是开发人员的责任
每当您看不到显式事务划分时——这意味着这就是CMT。
这是一个非常广泛的主题-我建议您定义什么是事务-基本上它是工作的原子单位
有两种类型的事务管理或事务划分(将划分视为启动事务、提交或回滚事务):CMT(容器管理的事务)-由底层容器为您管理(JTA)和BMT(bean管理的事务)-事务划分由开发人员自己以编程方式管理。所以,如果您在任何示例中看到,事务
是通过编程方式获得并提交或回滚的,这就是BMT的示例,也就是说,管理事务是开发人员的责任
每当您看不到显式事务划分时——这意味着这就是CMT。
这是一个非常广泛的主题-我建议您使用Java或hibernate。事务是与Java或hibernate无关的数据库。Transaction是一个db thingI在没有Transaction的情况下执行了几个SQL
查询,一切正常。您能告诉我一些关于它可能出错的情况吗?我在没有事务的情况下执行了几个SQL
查询,结果很好。你能不能再多讲一点关于它可能出错的情况?