Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多个会话工厂';一起开会_Java_Hibernate_Sessionfactory - Fatal编程技术网

Java 多个会话工厂';一起开会

Java 多个会话工厂';一起开会,java,hibernate,sessionfactory,Java,Hibernate,Sessionfactory,我试图实现一个分片的Hibernate逻辑。所有数据库都有相同的名为MyTable的表,该表通过Hibernate POJO映射到MyClass public class SessionFactoryList { List<SessionFactory> factories; int minShard; int maxShard; // getters and setters here. } 我在测试用例中使用HSQL内存数据库。 我已验证DB连接是否正确设置,但Assert语句失

我试图实现一个分片的Hibernate逻辑。所有数据库都有相同的名为MyTable的表,该表通过Hibernate POJO映射到MyClass

public class SessionFactoryList {
List<SessionFactory> factories;
int minShard;
int maxShard;
// getters and setters here.
}
我在测试用例中使用HSQL内存数据库。 我已验证DB连接是否正确设置,但Assert语句失败

MyClassDao的“getAll”方法返回3行。插入到SessionFactory1会话中的MyClass对象被复制


这里有我遗漏的东西吗?

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

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;
}
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

 }
}