多个 SessionFactories 的会话在一起
Multiple SessionFactories' sessions together
我正在尝试实现分片 Hibernate 逻辑。所有数据库都有相同的 table 称为 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 语句失败。
'getAll' MyClassDao 方法返回 3 行。插入 SessionFactory1 会话中的 MyClass 对象正在复制。
这里有什么我遗漏的吗?
我找到了。我用于测试的 2 个 sessionFactory 配置具有相同的数据库 URL。因此,同一个数据库被查询两次,导致重复。
我正在尝试实现分片 Hibernate 逻辑。所有数据库都有相同的 table 称为 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 语句失败。
'getAll' MyClassDao 方法返回 3 行。插入 SessionFactory1 会话中的 MyClass 对象正在复制。
这里有什么我遗漏的吗?
我找到了。我用于测试的 2 个 sessionFactory 配置具有相同的数据库 URL。因此,同一个数据库被查询两次,导致重复。