Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Hibernate 在测试方法中声明@Transaction时,为什么不在多对多关系中持久化联接表?_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Hibernate 在测试方法中声明@Transaction时,为什么不在多对多关系中持久化联接表?

Hibernate 在测试方法中声明@Transaction时,为什么不在多对多关系中持久化联接表?,hibernate,jpa,spring-data-jpa,Hibernate,Jpa,Spring Data Jpa,在测试方法中声明@Transaction时,为什么不在多对多关系中持久化联接表 下面是我的实体类代码 当我声明@Transaction时,Hibernate将值插入联接表。但是,如果我没有声明,请不要插入它 @实体 @表(name=“parent”) 公共类父实体{ @身份证 @列(name=“parent\u id”) @GeneratedValue(策略=GenerationType.IDENTITY) 私人长id; @纵队 私有字符串parentValue; @OneToMany(mapp

在测试方法中声明@Transaction时,为什么不在多对多关系中持久化联接表

下面是我的实体类代码

当我声明@Transaction时,Hibernate将值插入联接表。但是,如果我没有声明,请不要插入它

@实体
@表(name=“parent”)
公共类父实体{
@身份证
@列(name=“parent\u id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@纵队
私有字符串parentValue;
@OneToMany(mappedBy=“parentEntity”,cascade=CascadeType.PERSIST)
private List childs=new ArrayList();
}

@实体
@表(name=“child”)
公共类子实体{
@身份证
@列(name=“child\u id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@纵队
私有字符串childValue;
@许多酮
@JoinColumn(name=“parent\u id”)
私人父母实体父母实体;
@ManyToMany(cascade=CascadeType.PERSIST)
@可接合(
name=“child_标签”,
joinColumns=@JoinColumn(name=“child_id”,nullable=false),
inverseJoinColumns=@JoinColumn(name=“tag\u id”,nullable=false)
)
私有集标签;
}
@实体
@表(name=“Tag”)
公共类标记实体{
@列(name=“tag\u id”)
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
长塔吉德;
@纵队
字符串值;
@多个(mappedBy=“标记”)
私人名单儿童;
}
@事务O

Hibernate: insert into parent (parent_value) values (?)
Hibernate: insert into child (child_value, parent_id) values (?, ?)
Hibernate: insert into tag (value) values (?)
Hibernate: insert into tag (value) values (?)
Hibernate: insert into tag (value) values (?)
Hibernate: insert into child (child_value, parent_id) values (?, ?)
@跨国家X

Hibernate: insert into parent (parent_value) values (?)
Hibernate: insert into child (child_value, parent_id) values (?, ?)
Hibernate: insert into tag (value) values (?)
Hibernate: insert into tag (value) values (?)
Hibernate: insert into tag (value) values (?)
Hibernate: insert into child (child_value, parent_id) values (?, ?)
Hibernate: insert into child_tag (child_id, tag_id) values (?, ?)
Hibernate: insert into child_tag (child_id, tag_id) values (?, ?)
Hibernate: insert into child_tag (child_id, tag_id) values (?, ?)
下面是我的测试代码

@存储库
@交易的
公共类测试库{
@自动连线
私人实体管理者;
public void saveParent(ParentEntity parent){
em.persist(亲本);
}
}
@自动连线
测试库;
@试验
@事务性//事务性
公开无效测试(){
ParentEntity ParentEntity=新的ParentEntity();
parentEntity.setParentValue(“父值”);
ChildEntity childEntity1=新的ChildEntity();
childEntity1.setChildValue(“child1值”);
ChildEntity childEntity2=新的ChildEntity();
childEntity2.setChildValue(“child2值”);
TagEntity TagEntity=新的TagEntity();
tagEntity.setValue(“tag1值”);
TagEntity tagEntity2=新的TagEntity();
tagEntity.setValue(“tag2值”);
TagEntity tagEntity3=新的TagEntity();
tagEntity.setValue(“tag3值”);
Set tags1=新的HashSet();
tags1.add(tagEntity);
tags1.add(tagEntity2);
Set tags2=新的HashSet();
tags1.add(tagEntity2);
tags1.add(tagEntity3);
childEntity1.setTags(tags1);
childEntity2.setTags(tags2);
tagEntity.setChilds(Collections.singletonList(childEntity1));
tagEntity2.setChilds(Arrays.asList(childEntity1,childEntity2));
tagEntity3.setChilds(Collections.singletonList(childEntity2));
childEntity1.setParentEntity(父实体);
childEntity2.setParentEntity(父实体);
parentEntity.getChilds().add(childEntity1);
parentEntity.getChilds().add(childEntity2);
repository.saveParent(parentEntity);
}

EntityManager.persist()是一个“逻辑”操作,不强制触发insert语句

只有flush()和事务提交触发SQL语句的执行


因此,如果您希望没有事务提交,请查看所有调用INSERT语句,您必须调用<代码> EntIdMault.FLUSEH()/代码> < /P>。非常感谢你。