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: Data has changed. updated [0] rows」という例外が発生するため、機能しません。同様の問題をいくつか見つけましたが、すべてがフォームに関するものでしたが、このようなものはありませんでした。手伝って頂けますか?ありがとうございました

4

2 に答える 2

0

同じ問題があります。

何が起こるかというと、「WHERE id = ?」を使用するだけでなく、奇妙な方法で更新クエリを作成することです。しかし、「WHERE id = ? AND field1 = ? AND blabla」です。また、テーブルに float フィールドがある場合、mysql の癖が発生します。float_field = 0.1 は、float_field が 0.1 であっても常に true を返すとは限りません。これは概算値です:/

したがって、1 つの解決策は、float フィールドを 10 進数に変換することです。

もう1つの解決策は、@Idのみを使用して更新クエリを作成するようにebeanを作成することです...どのように、またはそれが可能かどうかさえわかりません...

于 2013-03-20T14:24:03.760 に答える