hibernate 中的事务边界是什么
What is a transaction boundary in hibernate
我有 2 个相互关联的问题
Q1 hibernate/Spring Data JPA 中的事务边界到底是什么。
我是 JPA 的新手,所以请举一个非常基本的例子,这样我就可以理解,因为我试图阅读多个博客,但仍然不是很清楚。
Q2 最重要的是,这是什么意思-
在休眠状态下,persist() 方法保证如果在事务边界之外调用它不会执行 INSERT 语句,save() 方法不保证相同。
什么是 事务边界的外部和内部以及如何在边界外执行?
事务边界是事务开始的地方或者是committed/rollbacked。
当事务启动时,事务上下文绑定到当前线程。因此,无论您的消息流中有多少端点和通道,只要您确保流在同一线程上继续,您的事务上下文就会被保留。一旦通过引入 Pollable Channel 或 Executor Channel 来打破它,或者在某些服务中手动启动新线程,Transactional 边界也会被打破。
- 其他人问这个问题 - 查一下。
如果你不明白的地方再写信给我更准确,我会解释。
我真的希望我有所帮助!
事务是一个工作单元,要么完全执行,要么根本不执行。
事务在典型的关系数据库中使用起来相当简单。
您通过修改一些数据来启动事务。每次修改都会启动一个事务,您通常无法避免它。您通过执行 commit
或 rollback
.
结束事务
在您的交易完成之前,您的更改无法在其他交易中看到(有例外、变化和细节)。如果您 rollback
您的交易,您在数据库中的所有更改都将被撤消。
如果您 commit
您的更改对其他事务可见,即对连接到同一数据库的其他用户可见。如果更改仅对新交易可见或对已经 运行 个交易可见,则实施会有所不同。
JPA 中的事务是数据库事务加上其他内容。
您可以通过获取 Transaction
对象并在其上调用方法来开始和结束事务。但是没有人再这样做了,因为它很容易出错。相反,您使用 @Transaction
注释方法,进入方法将启动事务,退出方法将结束事务。
Spring.
负责细节
JPA 事务的棘手部分在于,在 JPA 事务中,JPA 可能(并且将会)选择尽可能长时间地延迟甚至避免读写操作。例如,当您加载一个实体,并在同一个 JPA 事务中再次加载它时,JPA 不会从数据库加载它,而是 return 它在第一次加载操作期间 return 编辑的同一个实例。如果您想了解更多相关信息,我建议您查看 JPA 的一级缓存。
我有 2 个相互关联的问题
Q1 hibernate/Spring Data JPA 中的事务边界到底是什么。 我是 JPA 的新手,所以请举一个非常基本的例子,这样我就可以理解,因为我试图阅读多个博客,但仍然不是很清楚。
Q2 最重要的是,这是什么意思-
在休眠状态下,persist() 方法保证如果在事务边界之外调用它不会执行 INSERT 语句,save() 方法不保证相同。
什么是 事务边界的外部和内部以及如何在边界外执行?
事务边界是事务开始的地方或者是committed/rollbacked。
当事务启动时,事务上下文绑定到当前线程。因此,无论您的消息流中有多少端点和通道,只要您确保流在同一线程上继续,您的事务上下文就会被保留。一旦通过引入 Pollable Channel 或 Executor Channel 来打破它,或者在某些服务中手动启动新线程,Transactional 边界也会被打破。
- 其他人问这个问题 - 查一下。
如果你不明白的地方再写信给我更准确,我会解释。 我真的希望我有所帮助!
事务是一个工作单元,要么完全执行,要么根本不执行。
事务在典型的关系数据库中使用起来相当简单。
您通过修改一些数据来启动事务。每次修改都会启动一个事务,您通常无法避免它。您通过执行 commit
或 rollback
.
在您的交易完成之前,您的更改无法在其他交易中看到(有例外、变化和细节)。如果您 rollback
您的交易,您在数据库中的所有更改都将被撤消。
如果您 commit
您的更改对其他事务可见,即对连接到同一数据库的其他用户可见。如果更改仅对新交易可见或对已经 运行 个交易可见,则实施会有所不同。
JPA 中的事务是数据库事务加上其他内容。
您可以通过获取 Transaction
对象并在其上调用方法来开始和结束事务。但是没有人再这样做了,因为它很容易出错。相反,您使用 @Transaction
注释方法,进入方法将启动事务,退出方法将结束事务。
Spring.
JPA 事务的棘手部分在于,在 JPA 事务中,JPA 可能(并且将会)选择尽可能长时间地延迟甚至避免读写操作。例如,当您加载一个实体,并在同一个 JPA 事务中再次加载它时,JPA 不会从数据库加载它,而是 return 它在第一次加载操作期间 return 编辑的同一个实例。如果您想了解更多相关信息,我建议您查看 JPA 的一级缓存。