我成功配置Hibernate以使用批量查询来创建/更新对象,但是有一种情况尚未运行。有多个ManyToMany关系的Hibernate批处理事务
我有3个实体: - 主要实体 - 实体A - 实体B
主要实体有两个实体A和实体B.主要实体多对多关系是关系的拥有者:
@ManyToMany
@JoinTable(name = "MAIN_A", joinColumns = {
@JoinColumn(name = "MAIN_UID", nullable = false, updatable = false) }, inverseJoinColumns = {
@JoinColumn(name = "A_UID", nullable = false, updatable = false) })
private Set<EntityA> entitiesA = new HashSet<>(0);
@ManyToMany
@JoinTable(name = "MAIN_B", joinColumns = {
@JoinColumn(name = "MAIN_UID", nullable = false, updatable = false) }, inverseJoinColumns = {
@JoinColumn(name = "B_UID", nullable = false, updatable = false) })
private Set<EntityB> entitiesB = new HashSet<>(0);
我写了一个3个简单的测试。 首先,我在数据库中创建了一些实体A和实体B行(这与所有2个测试用例共同)。
第一种情形:为所有的主要实体和MAIN_A表条目只有一个插件: 创建n个主要实体和每个只有实体A
结果设置。所以在这种情况下浴槽插入工作正常。
第二种情况: 创建n个主要实体和每个只设置实体B
结果:只有一个插入的主要实体和MAIN_B表中的所有条目。所以在这种情况下浴槽插入工作正常。
第三种情况: 创建n个主要实体并为每个都设置实体A和实体B
结果:只有一个插入的所有主要实体和ñ插入两个MAIN A和MAIN_B表条目。在这种情况下批量插入不起作用。我Google搜索,但我找不到答案。
有没有人知道它为什么没有按预期在第三种情况下工作?我做错了什么?配置中是否有解决我需求的任何问题?
的3个场景的代码是非常简单的:
Set<EntityA> setA;
Set<EntityB> setB;
for (long i = 1; i < n; i++) {
MainEntity e = new MainEntity();
ac.setEntitiesA(setA); //this is commented in the second scenario
ac.setEntitiesB(setB); // this is commented in the first scenario
session.save(e);
}
我张贴在休眠论坛相同qestion:Hibernate Forum post
您可以添加用于执行第三种情况的代码吗? –
@MaciejKowalski我刚刚更新了代码 – Simone