mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#414 - Enh info: @History support for H2
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user