gpt4 book ai didi

java - 使用 java hibernate criteria API 选择和更新为单个查询

转载 作者:行者123 更新时间:2023-11-30 09:36:23 28 4
gpt4 key购买 nike

我编写了一个应用程序,它一次从 Oracle Db 中的一个表中读取 1 条记录,对其进行一些处理,然后再次将其保存到同一个表中。我还在表中维护一个状态列,以跟踪我当前的记录进度。例如。选择后最初记录状态为“N”,我将其更新为“U”,最后将其更改为“P”。

现在我的问题是我想运行此应用程序的多个实例,但不同实例可能会选择同一行的阻塞程序,因为选择状态并将其更新为“U”不是单个查询。所以它可能会发生过程 1 然后选择Process2 选择相同的记录,然后 Process1 将状态更新为“U”。我必须解决这个问题才能分发我的应用程序。

我已将选择和更新查询创建为单个事务,但我想因为这不会解决问题。我的这个逻辑是正确的吗?

我正在使用 Hibernate 访问数据库。有人知道如何使用 Hibernate java 实现这一点吗?

如果我上面的逻辑(关于交易)是正确的,那么我可以通过两种方式来做到这一点,如果其中任何一种是由 hibernate 提供的。

1-在1个查询中选择并更新记录

2-选择一行并将其锁定在一个查询中,然后在同一事务中运行另一个查询以将状态更新为“U”。在 SQL 中,我可以通过在查询结束时使用“for update”来做到这一点,但我不确定如何使用“Hibernate criteria”来做到这一点。Criteria 也有一个 API“forUpdate”,但我想这不起作用,因为查询由在这种情况下,Hibernate 最后没有“for update”。

谁能帮帮我

最佳答案

是的,可以使用条件进行一次查询。

我正在写一个例子。希望对您有所帮助。

public void updateEmployee(int empid,String firstname, String lastname, String email)
{
sf=connect(); // get connection
Session session=sf.openSession();
Transaction t=session.beginTransaction();

Employee emp= (Employee) session.get(Employee.class, empid);
emp.setFirstname(firstname);
emp.setLastname(lastname);
emp.setEmail(email);

session.update(emp); // Update employee
t.commit();
session.close();
}

关于java - 使用 java hibernate criteria API 选择和更新为单个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10789576/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com