2012-12-22 18 views
1

我遇到了Ebean問題並進行了更新。一切我需要的是這樣的:Playframework2:Ebean和OptimisticLockException

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(); 
    } 
} 

但becouse我得到例外它不工作 「OptimisticLockException:數據已更改更新[0]行。」我發現了一些類似的問題,但一切都是關於形式,但沒有像這樣。你可以幫我嗎?謝謝

+0

請顯示您的Order類的'update()'方法。 –

+0

我沒有自己的更新()。我使用默認擴展模型。 –

+0

你的代碼看起來很正常,你能告訴我們更多(完整)代碼嗎?也許還有一些煩人的錯誤,關於類型的東西或其他東西。 – biesior

回答

0

有同樣的問題。

ebean會以奇怪的方式構建更新查詢,而不僅僅是使用「WHERE id =?」但是「WHERE id =?AND field1 =?AND blabla」。 如果你有一個在表中的浮動字段,然後mysql怪癖踢,float_field = 0.1並不總是返回true,即使float_field IS 0.1,它的近似值:/

所以一個解決方案是轉換浮動字段到十進制。

另一種解決方案是讓ebean打造只使用@Id更新查詢...無法弄清楚如何,甚至如果可能的話......

0

我不得不使用浮點數據類型類似的問題。我已經更改爲DB中的十進制數據類型,並使用@Column表示法定義了長度:

@Column(columnDefinition =「Decimal(10,3)」) public float示例;

...它的工作原理。