#414 - Enh info: @History support for H2

This commit is contained in:
Robin Bygrave
2015-09-18 17:16:46 +12:00
parent fcb50ea13a
commit 606e1e6d3a
12 changed files with 304 additions and 7 deletions
@@ -35,7 +35,7 @@ public class ModelContainerApplyTest {
assertThat(foo.getComment()).isEqualTo("comment");
assertThat(foo.getTablespace()).isEqualTo("fooSpace");
assertThat(foo.getIndexTablespace()).isEqualTo("fooIndexSpace");
assertThat(foo.isWithHistory()).isEqualTo(true);
assertThat(foo.isWithHistory()).isEqualTo(false);
assertThat(foo.getColumns()).containsKeys("col1", "col3", "added_to_foo");
}
}
@@ -0,0 +1,83 @@
package com.avaje.tests.history;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.SqlQuery;
import com.avaje.ebean.SqlRow;
import com.avaje.ebean.Version;
import com.avaje.tests.model.converstation.User;
import org.junit.Test;
import java.sql.Timestamp;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class TestHistoryInsert extends BaseTestCase {
@Test
public void test() {
User user = new User();
user.setName("Jim");
user.setEmail("one@email.com");
Ebean.save(user);
Timestamp afterInsert = new Timestamp(System.currentTimeMillis());
List<SqlRow> history = fetchHistory(user);
assertThat(history).isEmpty();
List<Version<User>> versions = Ebean.find(User.class).setId(user.getId()).findVersions();
assertThat(versions).hasSize(1);
user.setName("Jim v2");
Ebean.save(user);
history = fetchHistory(user);
assertThat(history).hasSize(1);
assertThat(history.get(0).getString("name")).isEqualTo("Jim");
versions = Ebean.find(User.class).setId(user.getId()).findVersions();
assertThat(versions).hasSize(2);
assertThat(versions.get(0).getDiff()).containsKeys("name", "version", "whenModified");
user.setName("Jim v3");
user.setEmail("three@email.com");
Ebean.save(user);
history = fetchHistory(user);
assertThat(history).hasSize(2);
assertThat(history.get(1).getString("name")).isEqualTo("Jim v2");
assertThat(history.get(1).getString("email")).isEqualTo("one@email.com");
versions = Ebean.find(User.class).setId(user.getId()).findVersions();
assertThat(versions).hasSize(3);
assertThat(versions.get(0).getDiff()).containsKeys("name", "email", "version", "whenModified");
Ebean.delete(user);
User earlyVersion = Ebean.find(User.class).setId(user.getId()).asOf(afterInsert).findUnique();
assertThat(earlyVersion.getName()).isEqualTo("Jim");
assertThat(earlyVersion.getEmail()).isEqualTo("one@email.com");
history = fetchHistory(user);
assertThat(history).hasSize(3);
assertThat(history.get(2).getString("name")).isEqualTo("Jim v3");
assertThat(history.get(2).getString("email")).isEqualTo("three@email.com");
versions = Ebean.find(User.class).setId(user.getId()).findVersions();
assertThat(versions).hasSize(3);
}
/**
* Use SqlQuery to query the history table directly.
*/
private List<SqlRow> fetchHistory(User user) {
SqlQuery sqlQuery = Ebean.createSqlQuery("select * from c_user_history where id = :id order by sys_period_start");
sqlQuery.setParameter("id", user.getId());
return sqlQuery.findList();
}
}
@@ -4,8 +4,10 @@ import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.avaje.ebean.annotation.History;
import com.avaje.tests.model.BaseModel;
@History
@Entity
@Table(name="c_user")
public class User extends BaseModel {