首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Playframework2: Ebean和OptimisticLockException

问Playframework2: Ebean和OptimisticLockException
EN

Stack Overflow用户
提问于 2012-12-22 08:05:05
回答 2查看 449关注 0票数 1

我有一个关于Ebean和更新的问题。我需要的所有东西都是这样的:

代码语言:javascript
复制
public static Result cancelOrder(Long id){
Order order = Order.findByID(id);
if(order != null){
    order.canceled = true;
    order.update(id);
}
return OK();
}

我的模型:

代码语言:javascript
复制
@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:数据已更改。更新行“。我发现了一些类似的问题,但一切都是关于形式的,而不是像这样的。你能帮帮我吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-03-20 22:24:04

也有同样的问题。

ebean以一种奇怪的方式构建更新查询,而不是仅仅使用"WHERE id = ?“而是“其中id =?和field1 =?和blabla”。如果表中有一个浮点型字段,那么mysql的怪癖就会发挥作用,即使float_field是0.1,float_field = 0.1也不总是返回true,它是近似值:/

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

另一种解决方案是使ebean仅使用@Id构建更新查询...不知道是怎么回事,甚至是不可能的.

票数 0
EN

Stack Overflow用户

发布于 2015-03-06 02:50:43

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

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

...And它可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13998779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档