2013-04-03 3 views
1

Я учусь ebean, чтобы начать Я тестирование кода примеров на официальном сайте, так что у меня есть этот код:Avaje 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).

Кажется, что он не обновляет объект в базе данных, а вместо этого пытается вставить новый с тем же идентификатором, почему?

Я использую ebean 2.7.7, h2 1.3.170 как базу данных.

Спасибо за помощь

ответ

1

В теории вы могли бы получить это, если компонент не был увеличен, и вы не имеют свойство @version - но вы делаете.

Итак, не уверен. Вы можете попробовать использовать отладчик и посмотреть, почему вторая вставка рассматривается как таковая (а не обновление), или вы можете подтвердить то же поведение с последним Ebean

+0

Мне не хватало для улучшения классов. Спасибо за помощь. – res1