我有一个这样的实体:
@Entity
@Table(name = "PERSON_TB") {
public class Person implements Serializable {
private static final long serialVersionUID = 3433ba34234aL;
@Id
@Column(name = "ID")
private Long personId;
@Column(name = "NAME")
private String name;
@Column(name = "UPDATE_DATE")
private Date updatedDate;
//getters and setters
}
我有一个生成HQL的代码:
Update Person p set p.updatedDate = :dt_1 where p.personId = :pid_1,
p.updatedDate = :dt_2 where p.personId = :pid_2
....
执行更新的代码:
@SuppressWarnings("unchecked")
@TransactionAttribute(TransactionAttributeType.MANDATORY)
public int executeUpdate(String sql, Map<String, Object> params) {
Query query = getEntityManager().createQuery(sql);
for (Entry<String, Object> entry : params.entrySet()) {
query.setParameter(entry.getKey(), entry.getValue());
}
int rows = query.executeUpdate();
return rows;
}
问题:
@Version
注释一个字段。但是我应该专门为此在表中添加这个新字段吗?或者我可以为注释指定任何现有字段@Version
?这里有什么特殊处理吗?StaleObjectStateException
?因此,当抛出异常时,我可以确定它是乐观锁定异常吗?任何其他用例。原因是,我需要相应地通知用户。我有一个带有和的微服务。我使用注释对中的表执行操作。我遇到的问题是保存操作花费了太多的时间,所以我希望读取操作不被它阻塞。注意,保存是通过持久化实体来执行的。 当前,在所有并发保存操作完成之前,所有读取操作都不会返回结果,这意味着表被锁定。相反,我希望实现乐观锁定。我怎样才能做到呢?
问题内容: 我试图按顺序实施乐观锁定,以避免丢失更新情况。在我的应用程序中,当两个用户获取相同的记录,而第一个用户通过一些更改对其进行更新时。查看相同记录的第二个用户看不到此更改,并且他自己进行了一些更改并更新了该记录。因此,第一人称更改丢失。为了防止这种情况,我写了以下内容,但问题仍然存在。我是这个概念的新手,无法发现问题。 我试图通过阅读doc 11.3.4 来实现这一目标。自定义自动版本控制
问题内容: 我对Hibernate和Spring完全陌生,在尝试学习Spring,Hibernate,Maven等时,我只知道如何使用这三个方法来运行helloworld示例。根据我的基本理解,我被分配了执行乐观锁定的任务。就我用谷歌搜索,我只能看到它不是很困难,我所需要的只是在我的xml中添加一个版本标签,并在我的映射类中添加整数变量版本。 我的xml应该是这样的 当第二个用户保存时,hiber
我们有一个系统,我们偶尔会得到一个乐观的锁定异常。我们在代码中已经解决了这个问题,但现在我正在查看JPA 2,并看到它有一个用于处理这个问题的注释(@版本) 我们的问题是,一个表上有多个事务,如果表锁已满,则即使未对相同的记录进行更改,也会导致乐观锁定异常。 我们在JBoss 4.2服务器上使用hibernate,数据库可以是MySQL或SQL服务器。 如果改为使用@Version,这会在两个数据
当我试图理解基于版本的乐观锁定如何防止“最后提交获胜”问题和适当的覆盖时,我遇到了困难。 为了使问题更具体,让我们考虑以下使用 JDBC 的伪代码: 这里,如果其他事务会在更新和提交之间提交其更改呢?如果事务是并发的,那么第一个事务所做的更新尚未提交,因此第二个事务不可见(具有适当的隔离级别),因此第一个事务提交将覆盖第二个交易的更改,而不会出现任何通知或错误。 乐观锁定只是降低了问题发生的概率,
我不确定方法的设计是否恰当。 我们使用乐观锁定,将增量版本放置在每个实体上。这种实体的每次更新都是通过比较和交换算法执行的,该算法的成功与否取决于其他客户端是否同时更新实体。经典的乐观锁定,如hibernate。 我们还需要采取重新尝试的方法。我们使用基于< code>http的存储(etcd ),某些更新请求可能会超时。 这就是问题所在。如何结合乐观锁定和重试?这是我面临的具体问题。 假设我有一