J'essaie d'auditer un objet. Mon problème est, je ne reçois pas sur chaque base de données le même résultat.javers CdoSnapshot.SnapshotType différent de mssql à h2
Mon entité:
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;
}
}
La méthode d'essai:
@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()));
}
Sur MSSQL avec openjpa mon SystemOut ressemble à ceci:
MISE À JOUR
INITIALE
INITIALE
Sur H2 Le résultat est différent:
MISE À JOUR
MISE À JOUR
INITIALE
Je dirais que la première sortie est erroné. N'est-ce pas? Pourquoi sont-ils différents? Ce que je fais mal?
J'ai créé Javers pour MSSQL si:
@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();
}
};
Et pour 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;
}
};
Toute idée?
Merci
Mise à jour:
Si je MSSQL sans 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;
}
};
Il fonctionne comme prévu.
MISE À JOUR
MISE À JOUR
INITIAL
Ai-je fait quelque chose de mal avec openjpa?
Update 2 Je tends mon cas de test avec une autre entité (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);
}
Le jv_snapshot de table dans le MSSQL a maintenant les documents suivants:
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
La première entité a un mauvais deuxième type (initial) et a également une mauvaise version. La deuxième entité a l'air ok pour moi.
Est-ce un bug?