Почему бы не сохранить таблицу соединений в отношении многие-ко-многим при объявлении @Transaction в тестовом методе?
Ниже приведен мой код класса сущности.
Когда я объявляю @Транзакция Hibernate вставляет значения в таблицу соединений.Однако, если я не заявляю об этом, не вставляйте его.
@Entity
@Table(name = "parent")
public class ParentEntity {
@Id
@Column(name = "parent_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
private String parentValue;
@OneToMany(mappedBy = "parentEntity", cascade = CascadeType.PERSIST)
private List<ChildEntity> childs = new ArrayList<>();
}
@Entity
@Table(name = "child")
public class ChildEntity {
@Id
@Column(name = "child_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column
private String childValue;
@ManyToOne
@JoinColumn(name="parent_id")
private ParentEntity parentEntity;
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(
name = "child_tag",
joinColumns = @JoinColumn(name = "child_id", nullable = false),
inverseJoinColumns = @JoinColumn(name = "tag_id", nullable = false)
)
private Set<TagEntity> tags;
}
@Entity
@Table(name = "Tag")
public class TagEntity {
@Column(name = "tag_id")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
long tagId;
@Column
String value;
@ManyToMany(mappedBy = "tags")
private List<ChildEntity> childs;
}
@ Transactional 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 (?, ?)
@ Transcational 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 (?, ?)
Ниже приведен мой тестовый код.
@Repository
@Transactional
public class TestRepository {
@Autowired
private EntityManager em;
public void saveParent(ParentEntity parent) {
em.persist(parent);
}
}
@Autowired
TestRepository repository;
@Test
@Transactional // @Transactional
public void test() {
ParentEntity parentEntity = new ParentEntity();
parentEntity.setParentValue("parent value");
ChildEntity childEntity1 = new ChildEntity();
childEntity1.setChildValue("child1 value");
ChildEntity childEntity2 = new ChildEntity();
childEntity2.setChildValue("child2 value");
TagEntity tagEntity = new TagEntity();
tagEntity.setValue("tag1 value");
TagEntity tagEntity2 = new TagEntity();
tagEntity.setValue("tag2 value");
TagEntity tagEntity3 = new TagEntity();
tagEntity.setValue("tag3 value");
Set<TagEntity> tags1 = new HashSet<>();
tags1.add(tagEntity);
tags1.add(tagEntity2);
Set<TagEntity> tags2 = new 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(parentEntity);
childEntity2.setParentEntity(parentEntity);
parentEntity.getChilds().add(childEntity1);
parentEntity.getChilds().add(childEntity2);
repository.saveParent(parentEntity);
}