java - OptimisticLockException Ebean 即使使用@Version

标签 java orm playframework timestamp ebean

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

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());
}

如果有必要,我的方法可以转换 StringTimestamp :

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/

相关文章:

java - 如何解析后面带负号的字符串数字

java - spring boot-Whitelabel 错误页面

javascript - 从 Seuquelize 返回然后 JavaScript 中的代码块

java - Hibernate 支持的 Postgresql UUID?

dependencies - playframework 应用程序的 powermock 依赖项

java - 在本地jar到gradle项目中的阴影/阴影

java - JTable 单元格跨越多列

nhibernate - 在 nHibernate 中持久化是什么意思?

scala - Play 何时何地设置 Content-Length header ?

json - 如何用 JSON 树中的相同键替换所有值