2017-09-18 149 views
0

我尝试审核一个对象。我的问题是,我没有得到每个数据库相同的结果。javers CdoSnapshot.SnapshotType不同于mssql到h2

我的实体:

public class Person { 

    @Id 
    private String login; 
    private String name; 

    public Person(String login, String name) { 
     this.login = login; 
     this.name = name; 
    } 

    public String getLogin() { 
     return login; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

测试方法:

@Test 
public void testperson() throws SQLException { 
    Person entity = new Person("bob", "Robert Martin"); 
    javers.commit("user", entity); 

    entity.setName("Robert C."); 
    javers.commit("user", entity); 

    entity.setName("Robert B."); 
    javers.commit("user", entity); 

    List<CdoSnapshot> snapshots = javers.findSnapshots(QueryBuilder.byInstanceId("bob", Person.class).build()); 

    snapshots.forEach(a -> System.out.println(a.getType().toString())); 
} 

在使用OpenJPA MSSQL我systemout看起来是这样的:

UPDATE

INITIAL

初始

在H2结果看起来不同:

UPDATE

UPDATE

INITIAL

我要说的第一输出是错误的。不是吗? 他们为什么不同。我做错了什么?

我创建了MSSQL所以javers:

@Before 
public void setUp() { 
    JaversSqlRepository sqlRepository = SqlRepositoryBuilder.sqlRepository().withConnectionProvider(connectionProvider).withDialect(DialectName.MSSQL).build(); 
    javers = JaversBuilder.javers().registerJaversRepository(sqlRepository).build(); 
} 

ConnectionProvider connectionProvider = new ConnectionProvider() { 
    @Override 
    public Connection getConnection() { 
     OpenJPAEntityManager kem = OpenJPAPersistence.cast(entityManager); 
     return (Connection) kem.getConnection(); 
    } 
}; 

而对于H2:

@Before 
public void setUp() { 
    JaversSqlRepository sqlRepository = SqlRepositoryBuilder.sqlRepository().withConnectionProvider(connectionProvider).withDialect(DialectName.H2).build(); 
    javers = JaversBuilder.javers().registerJaversRepository(sqlRepository).build(); 
} 

ConnectionProvider connectionProvider = new ConnectionProvider() { 
    @Override 
    public Connection getConnection() { 
     return dbConnectionh2; 
    } 
}; 

任何想法?

谢谢

更新:

如果我使用MSSQL无OpenJPA的:

private final Connection localhostConnection = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=aDatabase;user=*******;password=********"); 

@Before 
public void setUp() { 
    JaversSqlRepository sqlRepository = SqlRepositoryBuilder.sqlRepository().withConnectionProvider(connectionProvider).withDialect(DialectName.MSSQL).build(); 
    javers = JaversBuilder.javers().registerJaversRepository(sqlRepository).build(); 
} 

ConnectionProvider connectionProvider = new ConnectionProvider() { 
    @Override 
    public Connection getConnection() { 
     return localhostConnection; 
    } 
}; 

它将按预期工作。

UPDATE

UPDATE

INITIAL

难道我做错了什么事与OpenJPA的?

更新2 我与另一个实体(bob1)延长我的测试用例:

@Test 
public void testPerson() throws SQLException { 
    Person entity = new Person("bob", "Robert Martin"); 
    javers.commit("user", entity); 

    entity.setName("Robert C."); 
    javers.commit("user", entity); 

    entity.setName("Robert B."); 
    javers.commit("user", entity); 

    Person entity1 = new Person("bob1", "Robert Martin"); 
    javers.commit("user", entity1); 

    entity1.setName("Robert C."); 
    javers.commit("user", entity1); 

    entity1.setName("Robert B."); 
    javers.commit("user", entity1); 
} 

在MSSQL表jv_snapshot现已以下记录:

snapshot_pk type  version global_id_fk 
0   INITIAL 1  0 
1   INITIAL 1  0 
2   UPDATE 2  0 
3   INITIAL 1  1 
4   UPDATE 2  1 
5   UPDATE 3  1 

第一实体有错误的第二种类型(初始)并且版本错误。第二个实体对我来说看起来不错。

这是一个错误?

回答