When two people attempt to update the same record near the same time, one of the updates will likely be overwritten. You can solve this problem with optimistic locking.
# migrations/011_add_products_lock_version.rb
add_column :products, :lock_version, :integer, :default => 0, :null => false
# products_controller.rb
def update
@product = Product.find(params[:id])
if @product.update_attributes(params[:product])
flash[:notice] = "Successfully updated product."
redirect_to product_path(@product)
else
render :action => 'edit'
end
rescue ActiveRecord::StaleObjectError
@product.reload
render :action => 'conflict'
end
<!-- _form.rhtml -->
<%= f.hidden_field :lock_version %>
<!-- conflict.rhtml -->
<% title "Edit Product Conflict" %>
Someone edited the product the same time you did. Please re-apply your changes to the product.
<h2>Your Submission:</h2>
<pre>
<% params[:product].each do |name, value| %>
<%=h name.humanize %>: <%=h value %>
<% end %>
</pre>
<h2>Edit Product:</h2>
<% form_for :product, :url => product_path(@product), :html => { :method => :put } do |f| %>
<%= render :partial => 'form', :locals => { :f => f } %>
<%= submit_tag 'Resolve' %>
<% end %>
分享到:
相关推荐
CREATE TABLE optimistic_table ( id INT PRIMARY KEY, data VARCHAR(255), version NUMBER ); ``` 2. 时间戳机制:与版本号类似,时间戳机制是在表中添加一个时间戳字段,记录数据最后修改的时间。在更新数据时...
通过使用批注测试OptimisticLock和PessimisticLocking的Spring Data JPA示例。 经过Oracle 12数据库测试 技术堆栈: Java 1.8+ Maven 3.6+ Spring Boot 2.4.2.RELEASE Oracle for Java数据库驱动程序ojdbc8 ...
传统的并发控制方法主要依赖于锁定机制(Locking Mechanisms),即通过阻止其他事务访问正在被修改的数据项来避免冲突。然而,这种做法可能导致较高的等待时间、死锁等问题,并限制了系统的吞吐量。为了解决这些问题...
乐观锁定行为Propel2 的乐观锁定行为。... behavior name = " optimistic_locking " /></ table> 如果你还没有通过 composer 安装这个行为,你需要指定完整的类名作为行为名: < behavior name = " \MJS\Opti
#### 7.2 Optimistic Locking - **乐观锁**:通过版本号或时间戳等手段实现并发控制,防止数据冲突。 ### EJB Object and EJB Context #### 8.1 一般规则 - **EJB Object**:提供远程接口的EJB组件,允许其他...
Why Concurrency Control is required? Formal Concepts Serial, realizable, equivalent schedules 4 invalid schedules Concurrency control – a DBMS ...Optimistic locking Multi-Version Concurrency Control
3. **Optimistic Locking**: 乐观锁是一种在不锁定记录的情况下处理并发的方法。Laravel提供了一个方便的`updateUsingVersion()`方法,它会在更新记录时检查版本字段是否匹配。如果版本不符,表示记录已被其他事务...
Gorm乐观锁 这是一个基于的乐观锁插件。 快速开始 func BenchmarkUpdateWithOptimistic ( b * testing.... dsn := "root:abc123@... var out Optimistic db . First ( & out , Optimistic { Id : 1 }) out . Amount =
This is a bit like the way Hibernate uses optimistic locking for versioned objects. The benefit is that lock contention is totally removed because there aren’t any locks on rows! This means that ...
主要分为两种类型:乐观锁(Optimistic Locking)和悲观锁(Pessimistic Locking)。 **悲观锁(Pessimistic Locking)** 悲观锁假设数据在任何时候都可能发生并发冲突,因此在数据读取时就对其进行锁定,确保在...
#### 三、乐观锁(Optimistic Locking) ##### 3.1 定义 乐观锁基于一种假设:大多数并发操作都不会引起冲突。它通过比较数据版本号(或最后一次修改时间戳)等方式来判断数据是否被修改,从而决定是否需要回滚事务...
- **并发控制**:通过版本号(Optimistic Locking)或显式加锁(Pessimistic Locking)来解决并发问题。 - **性能瓶颈**:通过分析SQL执行计划、调整索引结构等方式优化数据库性能。 通过本手册的学习,开发者不仅...
- **乐观锁(Optimistic Locking)**:假设数据不会被其他事务修改,只在提交时检查版本号等信息,适用于读多写少的场景。 - **悲观锁(Pessimistic Locking)**:假设数据会被其他事务修改,因此在事务开始时就锁定数据...
- **乐观锁(Optimistic Locking)**: 基于版本号或时间戳机制实现。 #### 十五、Hibernate分页 - 实现分页查询,提高大数据量下的查询效率。 #### 十六、Cache管理 - 内置缓存机制,提高应用程序性能。 - **一级...
This project is based on Java, is a lightweight ORM model. Only concerned about the Object-Relationl Mapping, therefore more ...Support for optimistic locking; A rich set of tools for SQL statements;
1. **乐观锁(Optimistic Locking)**:假设数据不会经常冲突,只有在提交时才会进行冲突检测。Hibernate 通过版本字段实现自动乐观并发控制。 2. **悲观锁(Pessimistic Locking)**:假设数据冲突很常见,因此在数据...