Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠,如果beginTransaction赢了会发生什么;不能用吗?_Java_Sql_Hibernate_Session_Transactions - Fatal编程技术网

Java 冬眠,如果beginTransaction赢了会发生什么;不能用吗?

Java 冬眠,如果beginTransaction赢了会发生什么;不能用吗?,java,sql,hibernate,session,transactions,Java,Sql,Hibernate,Session,Transactions,我使用hibernate 5.2连接到SQLite库。我创建了一个新的会话,并在关闭会话后使用了会话.createNativeQuery(“我的sql”).executeUpdate()。一切正常,但我遇到了几个例子,在创建会话后,它们开始事务,执行SQL操作,提交事务,然后关闭会话。但并非所有在线示例中都包含事务,没有它我的代码运行良好 这让我好奇: 为什么我们需要使用事务 如果我们不这样做会发生什么 最重要的是,在哪些情况下需要使用,在哪些情况下需要使用 不是吗 我使用1为什么我们需要使

我使用hibernate 5.2连接到
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
查询,结果很好。你能不能再多讲一点关于它可能出错的情况?