Playframework 2.0 游戏框架2:Ebean和OptimisticLockException
我对Eben和update有问题。我需要的一切都是这样的:Playframework 2.0 游戏框架2:Ebean和OptimisticLockException,playframework-2.0,ebean,Playframework 2.0,Ebean,我对Eben和update有问题。我需要的一切都是这样的: 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 ex
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();
}
}
但它不起作用,因为我得到了异常乐观的锁异常:数据已经改变。已更新[0]行。我发现了一些类似的问题,但一切都与形式有关,而不是像这样。你能帮助我吗?谢谢你有同样的问题 所发生的事情是,ebean以一种奇怪的方式构建更新查询,而不仅仅是使用WHERE id=?但是id=?字段1=?等等。 如果表中有一个float字段,那么mysql怪癖就会出现,float\u field=0.1并不总是返回true,即使float\u field为0.1,它也是近似值:/ 因此,一种解决方案是将浮点字段转换为十进制
另一个解决方案是让ebean只使用@Id构建更新查询。。。无法弄清楚如何或甚至是否可能…我在使用Float数据类型时遇到了类似的问题。我已更改为仅以DB为单位的十进制数据类型,并使用@Column表示法定义了长度: @ColumnDefinition=小数10,3 公开上市的例子
…它可以工作。请显示您的订单类的更新方法。我没有自己的更新。我通过扩展模型使用默认值。您的代码看起来很正常,您能给我们展示更多完整的代码吗?也许还有其他一些恼人的错误,关于类型的问题,或者别的什么。