我有一个关于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:数据已更改。更新行“。我发现了一些类似的问题,但一切都是关于形式的,而不是像这样的。你能帮帮我吗?谢谢
发布于 2013-03-20 22:24:04
也有同样的问题。
ebean以一种奇怪的方式构建更新查询,而不是仅仅使用"WHERE id = ?“而是“其中id =?和field1 =?和blabla”。如果表中有一个浮点型字段,那么mysql的怪癖就会发挥作用,即使float_field是0.1,float_field = 0.1也不总是返回true,它是近似值:/
因此,一种解决方案是将浮点型字段转换为十进制。
另一种解决方案是使ebean仅使用@Id构建更新查询...不知道是怎么回事,甚至是不可能的.
发布于 2015-03-06 02:50:43
我在使用浮点数据类型时也遇到了类似的问题。我在DB中仅更改为Decimal数据类型,并使用@Column表示法定义长度:
@Column(columnDefinition = "Decimal(10,3)")公共浮点型示例;
...And它可以工作。
https://stackoverflow.com/questions/13998779
复制相似问题