我试图在我的数据库中使用Ebean
更新我的Play! Framework
程序中的一行。
这是我想要更新的实体的类。
Transaction.javaOptimisticLockException Ebean即使使用@Version
@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
我做错了什么?
如果我把'@ Version'放在Id字段上,可以吗? – Mornor 2015-04-03 12:01:55
否。添加一个名为version的新列,您可以忘记它是否 – Salem 2015-04-03 13:56:21