H2 base de données valeur par défaut de la colonne TIMESTAMP
Je suis en train d'écrire les tests d'intégration avec H2 base de données.
Ma base de données (produits) d'initialisation comprennent ce script (car généré table de jointure ne dispose pas de cette colonne):
ALTER TABLE INT_USR ADD IU_INSDTTM TIMESTAMP DEFAULT NOW();
C'est comment j'ai créer des enregistrements:
Integration integrationOne = createIntegration(firstId, "FIRST");
Integration integrationTwo = createIntegration(secondId, "SECOND");
flushAndClear();
userService.logRecentIntegration(integrationOne.getId(), user.getId());
flushAndClear();
userService.logRecentIntegration(integrationTwo.getId(), user.getId()); //1
La méthode logRecentIntegrations(.., ..) appelle simplement la DAO et de la dao n'est ceci:
Query query = entityManager.createNativeQuery(
"INSERT INTO INT_USR (USR_ID, INT_ID) VALUES (?, ?)");
query.setParameter(1, userId)
.setParameter(2, integrationId);
query.executeUpdate();
Plus tard dans mon test:
Query query = entityManager.createNativeQuery(
"SELECT * FROM INT_USR ORDER BY IU_INSDTTM");
List resultList = query.getResultList();
Quand je debug de ce test dans resultList il y a deux disques (correct), mais ils ont la même heure. Même quand j'ai inséré un point d'arrêt sur la ligne marquée //1 et a attendu un certain temps - de sorte que l'écart de temps entre les insertions serait importante. (Thread.le sommeil même résultat)
J'ai essayé de modifier le script SQL pour
ALTER TABLE INT_USR ADD IU_INSDTTM TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
Mais avec le même résultat. Pourquoi les résultats ont même timestamp?
Vous devez vous connecter pour publier un commentaire.
Comme documenté, la fonction CURRENT_TIMESTAMP renvoie toujours la même valeur au sein d'une transaction. Ce comportement correspond à d'autres bases de données, par exemple PostgreSQL.
@Service @Transactional public class UserServiceImpl implements UserService { ... public void logRecentIntegration(Long integrationId, Long userId) {}
De sorte que chaque appel à la méthode est différente de la transaction, n'est-ce pas?Vous pouvez ajouter l'annotation suivante à votre test pour désactiver les transactions.
@Transaction(propagation = Propagation.NEVER)
Remarque: Cette annotation vient de Printemps et il y a peut être autre chose pour l'environnement que vous exécutez l'intérieur.