J'essaye d'implémenter une logique d'Hibernate partagée. Toutes les bases de données ont la même table appelée MyTable qui est mappée à MyClass via Hibernate POJO.Plusieurs sessions SessionFactories ensemble
public class SessionFactoryList {
List<SessionFactory> factories;
int minShard;
int maxShard;
// getters and setters here.
}
Dans ma mise en œuvre de Dao, j'ai une méthode getAll qui suit -
public class MyClassDao {
@Autowired // through Spring
private SessionFactoryList list;
List<MyClass> getAll() {
List<MyClass> outputList = new ArrayList<>();
for(SessionFactory s : list.getFactories()) {
Criteria c = s.getCurrentSession.createCriteria(MyClass.class);
outputList.addAll(c.list());
}
return outputList;
}
Voici mon test pour la getAll mise en œuvre correspondant -
public class MyClassTest {
@Autowired
SessionFactoryList list;
@Autowired
MyClassDao myClassDao;
@Test
void getAllTest() {
Session session1 = list.getFactories.get(0).getCurrentSession();
session1.beginTransaction();
session1.save(new MyClass(// some parameters here));
Session session2 = list.getFactories.get(1).getCurrentSession();
session2.beginTransaction();
session2.save(new MyClass(// some parameters here));
//Set up done.
assert myClassDao.getAll().size() == 2
}
}
J'utilise HSQL en -mémoire base de données pour les cas de test. J'ai vérifié que les connexions DB sont correctement configurées, mais l'instruction Assert échoue.
La méthode 'getAll' de MyClassDao retourne 3 lignes. L'objet MyClass inséré dans la session de SessionFactory1 est dupliqué.
Y at-il quelque chose qui me manque ici?