2017-09-18 45 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 

第一實體有錯誤的第二種類型(初始)並且版本錯誤。第二個實體對我來說看起來不錯。

這是一個錯誤?

回答