1

我正在学习ebean,首先我正在测试官方网站上的示例代码,所以我有这个代码:

ESimple e = new ESimple();  
e.setName("test");  
e.setDescription("something");  

// will insert  
Ebean.save(e);  

e.setDescription("changed");  

// this will update  
Ebean.save(e); 

// find the inserted entity by its id  
ESimple e2 = Ebean.find(ESimple.class, e.getId());  
System.out.println("Got "+e2.getDescription());  

Ebean.delete(e); 

ESimple 就是这个简单的类:

@Entity  
@Table(name="e_junktable")
public class ESimple {

    @Id 
    Integer id;  

    String name;  

    String description;  

    @Version  
    Timestamp lastUpdate;

    // getters, setters

}

运行上面的代码,我从日志中得到了那个错误:

txn[1003], 15:32:11.019, insert into e_junktable (id, name, description) values (?,?,?) 

txn[1003], 15:32:11.019, Binding Insert [e_junktable]  set[id=1, name=test, description=something, ] 

txn[1003], 15:32:11.024, Inserted [ESimple] [1] 

txn[1004], 15:32:11.024, insert into e_junktable (id, name, description) values (?,?,?) 

txn[1004], 15:32:11.024, Binding Insert [e_junktable]  set[id=1, name=test, description=changed, ] 

txn[1004], 15:32:11.039, ERROR executing DML bindLog[Binding Insert [e_junktable]  
set[id=1, name=test, description=changed, ]] error[Unique index or primary key violation: "PRIMARY_KEY_C ON PUBLIC.E_JUNKTABLE(ID)"; SQL statement:\n insert into e_junktable (id, name, description) values (?,?,?) [23505-170]]

错误在第二个Ebean.save(e)

似乎它没有更新数据库中的对象,而是尝试插入一个具有相同 id 的新对象,为什么?

我使用 ebean 2.7.7、h2 1.3.170 作为数据库。

谢谢您的帮助

4

1 回答 1

1

理论上,如果 bean 没有被增强并且你没有 @Version 属性,你可以得到这个 - 但你有。

所以,不确定。您可以尝试使用调试器并查看为什么第二次插入被视为这样(不是更新),或者您可以使用最新的 Ebean 确认相同的行为

于 2013-04-12T01:26:59.637 回答