Я попытался обновить строку в моей БД, используя 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
№ Добавить новый столбец с именем version, и вы можете его забыть – Salem