본문 바로가기

컴퓨터공학/Spring & Hibernate

Spring> Hibernate> @OneToOne Mapping

데이터베이스 설정하기

Foreign Key에 대한 설명은...

코딩의 시작, TCP School

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

 


사전작업

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 조건을 바꿔야 한다.