Несколько сеансов SessionFactory вместе

Я пытаюсь реализовать сегментированную логику 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, дублируется.

Есть ли что-то, что я упускаю здесь?


person Amit    schedule 21.09.2015    source источник


Ответы (1)


Я нашел это. Две конфигурации sessionFactory, которые я использовал для теста, имели один и тот же URL-адрес базы данных. Следовательно, одна и та же база данных была запрошена дважды, что привело к дублированию.

person Amit    schedule 22.09.2015