[Spring Data JPA] Cascade
2019. 10. 5. 15:41ㆍSPRING/Spring Data JPA
ManyToOne 또는 OneToMany에 옵션으로 설정 가능.
상태변화를 전파하는 옵션이다.
1. 생성
1) cascade 옵션 설정
@Entity
public class School {
@Id @GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "school", cascade = CascadeType.ALL)
private Set<Student> students = new HashSet<>();
}
2) 실행 테스트
@Component
@Transactional
public class JpaRunner implements ApplicationRunner {
@PersistenceContext
EntityManager entityManager;
@Override
public void run(ApplicationArguments args) throws Exception {
Session session = entityManager.unwrap(Session.class);
// school1
School school1 = new School();
school1.setName("testSchool");
Student student1 = new Student();
student1.setName("stu1");
school1.addStudent(student1);
Student student2 = new Student();
student2.setName("stu2");
school1.addStudent(student2);
Student student3 = new Student();
student3.setName("stu3");
school1.addStudent(student3);
session.save(school1);
// school2
School school2 = new School();
school2.setName("testSchool2222");
Student student1 = new Student();
student1.setName("stu10");
school2.addStudent(student1);
Student student2 = new Student();
student2.setName("stu11");
school2.addStudent(student2);
Student student3 = new Student();
student3.setName("stu12");
school2.addStudent(student3);
session.save(school2);
}
}
3) 결과
springdata=# select * from school;
id | name
----+----------------
1 | testSchool
5 | testSchool2222
(2 rows)
springdata=# select * from student;
id | name | school_id
----+-------+-----------
2 | stu1 | 1
3 | stu3 | 1
4 | stu2 | 1
6 | stu11 | 5
7 | stu12 | 5
8 | stu10 | 5
(6 rows)
2. 삭제
1) 실행 테스트
@Component
@Transactional
public class JpaRunner implements ApplicationRunner {
@PersistenceContext
EntityManager entityManager;
@Override
public void run(ApplicationArguments args) throws Exception {
Session session = entityManager.unwrap(Session.class);
School school = session.get(School.class, 1l);
session.delete(school);
}
}
2) 결과 쿼리
Hibernate:
/* delete me.sky.jpa_study.Student */ delete
from
student
where
id=?
3) 결과
springdata=# select * from school;
id | name
----+----------------
5 | testSchool2222
(1 row)
springdata=# select * from student;
id | name | school_id
----+-------+-----------
6 | stu11 | 5
7 | stu12 | 5
8 | stu10 | 5
(3 rows)
'SPRING > Spring Data JPA' 카테고리의 다른 글
[Spring Data JPA] 프로젝트 세팅 (0) | 2020.05.05 |
---|---|
[Spring Data JPA] Repository 생성 (0) | 2019.10.08 |
[Spring Data JPA] annotation(어노테이션) (0) | 2019.09.29 |