데이터베이스 설정하기
Foreign Key에 대한 설명은...
사전작업
JDBC와 MYSQL 연결작업을 해주고 테스트해보자.
라이브러리는 이전 프로젝트를 복붙했으니 다시할 필요는 없고
클래스 만들기
먼저 Instructor Detail을 만들자.
지금부터 해야할 순서는 다음과 같다.
1. 클래스를 엔티티로 지명하고 데이터베이스 테이블에 연결한다.
2. 필드를 정의한다.
3. 필드를 데이터베이스 칼럼이름과 같이 지명한다.
4. 생성자를 만든다.
5. getter/setter 메서드를 만든다.
6. toString( ) 메서드를 만든다.
오른쪽클릭 - [Source] - [Organize Imports] 를 해서 javax.persistence.Entity를 import한다.
id는 생성자에서 제외하고
밑에 Omit call to default constructor super()는 체크 해제
반면에 Getter/Setter 만들 때 필드는 모두 선택해준다.
이제는 Instructor를 만들자.
Instructor 클래스도 만들어주고 똑같은 방법으로 organize import를 한다.
그리고 getter/setter, Constructor,toString 메소드를 만들어주면
Instructor 클래스도 완성
메인함수 만들기
기존에 있는 걸 복붙해왔으니 Refactor로 이름을 바꿔서 재활용하자.
SessionFactory를 구성해줘야한다. Instructor와 InstructorDetail 의 AnnotatedClass를 추가한다.
이렇게 해서 Hibernate가 이 클래스들을 알게하고 이것들을 꺼내고 만들 수 있게 해준다.
CascadeType.All 을 했기 때문에 Instructor를 저장해도 detail 오브젝트도 저장이 같이된다.
Delete
원리는 이전과 거의 유사하다.
session으로 데이터베이스에서 객체로 가리키게 만들고
같이 사라져버렸다
Bi Directional - Get
기존 프로젝트를 복붙하여 새롭게 만든다.
Instructor detail 에서 instructor 필드를 만들고 getter setter를 만들어 준다.
mappedBy 클래스에 들어갈 내용은
Instructor 클래스에서 InstructorDetail 클래스 필드이다.
cascade 조건을 넣어준다.
기존에 있는 DeleteDemo 를 복붙하여 GetInstructorDetailDemo로 만들어준다.
Id를 잘못입력해서 오류가 발생하는 조건도 설정해야한다.
catch를 추가했고 session.close( ) 를 넣어서 leak 문제를 해결했다.
Bi Directional - Delete
InstructorDetail을 삭제하면 연관된 Instructor도 같이 삭제된다.
만약 InstructorDetail만 삭제하고 Instructor는 냅두고 싶다면??
InstructorDetail이 삭제될 때 Instructor가 삭제 안되고 남기려면
Instructor에서 instructorDetail의 선을 끊어줘야 한다.
그리고 cascade 조건을 바꿔야 한다.
'컴퓨터공학 > Spring & Hibernate' 카테고리의 다른 글
Spring> Hibernate> Eager vs Lazy Loading (0) | 2021.04.29 |
---|---|
Spring> Hibernate> @OneToMany (0) | 2021.04.28 |
Spring> Hibernate> CRUD (0) | 2021.04.27 |
Spring> Hibernate> Configuration with Annotation (0) | 2021.04.23 |
Spring> Hibernate> Intro (0) | 2021.04.23 |