1

我对 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] 行”。我发现了一些类似的问题,但一切都与形式有关,但没有像这样。你能帮助我吗?谢谢

4

2 回答 2

0

我在使用 Float 数据类型时遇到了类似的问题。我仅在 DB 中更改为 Decimal 数据类型,并使用 @Column 表示法定义长度:

@Column(columnDefinition = "Decimal(10,3)") 公共浮点示例;

...而且它有效。

于 2015-03-05T18:50:42.640 回答
0

有同样的问题。

发生的情况是 ebean 以一种奇怪的方式构建更新查询,而不仅仅是使用“WHERE id =?” 但是“WHERE id = ? AND field1 = ? AND blabla”。如果表中有一个 float 字段,那么 mysql 就会出现怪癖,即使 float_field 为 0.1,float_field = 0.1 也不总是返回 true,它是近似值:/

因此,一种解决方案是将浮点字段转换为十进制。

另一种解决方案是让 ebean 仅使用 @Id 构建更新查询......无法弄清楚如何或即使它可能......

于 2013-03-20T14:24:03.760 回答