我遇到了Ebean和更新的问题。我需要的一切都是这样的:
public static Result cancelOrder(Long id){
Order order = Order.findByID(id);
if(order != null){
order.canceled = true;
order.update(id);
}
return OK();
}
我的模特:
@Entity
@Table(name="order")
public class Order extends Model {
@Id
@Column(name="ID")
public long id;
@Constraints.Required
public String date;
@Constraints.Required
public String name;
public Boolean canceled;
public Order(String date, String name){
this.date = date;
this.name = name;
}
public static Model.Finder<String,Order> find = new Model.Finder(String.class, Order.class);
public static Order findByID(long id) {
return find.where().eq("ID", id).findUnique();
}
}
但它不起作用因为我得到异常“OptimisticLockException:数据已更改。更新[0]行”。我发现了一些类似的问题,但一切都是关于形式但不是这样的。你能帮助我吗?谢谢
答案 0 :(得分:0)
遇到同样的问题。
ebean以奇怪的方式构建更新查询,而不只是使用“WHERE id =?”但是“WHERE id =?AND field1 =?AND blabla”。 如果表中有一个浮点字段,那么mysql怪癖就会启动,即使float_field为0.1,它也不会总是返回true,它是近似值:/
因此,一种解决方案是将浮点字段转换为十进制。
另一个解决方案是让ebean仅使用@Id构建更新查询...无法弄清楚如何,甚至是否可能......
答案 1 :(得分:0)
我使用Float数据类型时遇到了类似的问题。我只在DB中更改为Decimal数据类型,并使用@Column表示法定义了长度:
@Column(columnDefinition =“Decimal(10,3)”) public Float示例;
......而且有效。