多个SessionFactories'会议在一起

时间:2015-09-21 15:18:03

标签: java hibernate sessionfactory

我正在尝试实现分片的Hibernate逻辑。所有数据库都有相同的表MyTable,它通过Hibernate POJO映射到MyClass。

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语句失败。

&#39; GETALL&#39; MyClassDao的方法返回3行。在SessionFactory1的会话中插入的MyClass对象正在重复。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

我找到了。我用于测试的2个sessionFactory配置具有相同的数据库URL。因此,相同的数据库被查询两次导致重复。