gpt4 book ai didi

java - OptimisticLockException Ebean 即使有@Version

转载 作者:行者123 更新时间:2023-11-30 07:01:57 26 4
gpt4 key购买 nike

我尝试在 Play 中使用 Ebean 更新数据库中的一行!框架程序。
这是我要更新的实体的类。

Transaction.java

@Entity
@Table(name = "transactions")
public class Transaction extends Model{

@Id
@GeneratedValue
public int id;
@OneToOne
@JoinColumn(name = "car_fk")
public Car car;
@OneToOne
@JoinColumn(name = "user_lender_fk")
public User user;
@Version
public Timestamp from_date;
@Version
public Timestamp to_date;
public boolean availability; // true -> Available.
public String status;
}

这是我用来更新它的方法:

Transaction transaction = new Transaction(); 
transaction.car = concernedCars.get(i);
transaction.user = currentUser;
transaction.from_date = Tools.StringAndroidToTimestamp(dateFrom);
transaction.to_date = Tools.StringAndroidToTimestamp(dateTo);
transaction.status = Constants.WAITING_FOR_ANSWER;
try{
Ebean.update(transaction);
}catch(OptimisticLockException e){
Logger.info(e.toString());
}

如有必要,我将 String 转换为 Timestamp 的方法:

public static Timestamp StringAndroidToTimestamp(String s){
String toConvert = s.substring(0, s.length()-2);
Logger.info("ToConvert = "+toConvert);
Timestamp timestamp = null;
try{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parsedDate = dateFormat.parse(toConvert);
timestamp = new Timestamp(parsedDate.getTime());
}catch(Exception e){
Logger.info("Exception date = " +e.toString());
}
return timestamp;
}

当然,我得到了极好的错误:

javax.persistence.OptimisticLockException: Data has changed. updated [0] rows sql

我做错了什么?

最佳答案

有几种方法可以处理这个问题。

1) Use @EntityConcurrencyMode(ConcurrencyMode.NONE) before class name

2) Use raw update query.(preferred)

由于相同的 ebean.update 抛出乐观锁异常,我面临太多问题,最后我进行了原始更新查询并且它对我有用。

关于java - OptimisticLockException Ebean 即使有@Version,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29393074/

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