Я пытаюсь реализовать сегментированную логику Hibernate. Все базы данных имеют одну и ту же таблицу с именем MyTable, которая сопоставляется с MyClass через Hibernate POJO.
public class SessionFactoryList {
List<SessionFactory> factories;
int minShard;
int maxShard;
// getters and setters here.
}
В моей реализации Dao у меня есть метод getAll, который выглядит следующим образом:
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;
}
Вот мой тест для соответствующей реализации getAll:
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
}
}
Я использую базу данных HSQL в памяти для тестовых случаев. Я убедился, что соединения с БД настроены правильно, но оператор Assert не работает.
Метод «getAll» MyClassDao возвращает 3 строки. Объект MyClass, вставленный в сеанс SessionFactory1, дублируется.
Есть ли что-то, что я упускаю здесь?