개발일지/2023_한이음

[개발] 🎁배운점 - @ManyToOne과 자료형이 객체일때

기억지기 개발자 2023. 5. 29. 13:53

Review 엔티티의 필드 중 외래키
전부를 설명하기에는 복잡하니 간단하게 그림으로 표현해보았다.

🛤️현상

School entity의 id 값을 리뷰 entity의 schoolId가 외래키로써 사용하는 관계인데, 
나는 왜 여기서 schoolId의 자료형이 왜 School인지가 의문이었다. 왜냐하면 DB에 들어있는 실제 schoolId의 자료형은 Long 타입인데 말이다. 그리고 저렇게 객체가 자료형이면 DB에는 어떻게 값이 들어가는지도 의문이었다.

🗝️아하!

왜 자료형이 School이지?

[School 자료형을 사용함으로써 Review 엔티티와 관련된 School 엔티티와 직접적인 연관 관계를 설정할 수 있습니다. 이를 통해 Review 엔티티에서 관련된 School 객체에 직접적으로 접근하고 조작할 수 있습니다.
Long 타입 대신 School 객체 자료형을 사용하는 이유는, 연관된 School 객체의 속성과 동작에 접근할 수 있는 기능을 유지하기 위함입니다. School 객체의 식별자(ID)만 가지고 있다면, 실제 School 엔티티에 접근하여 필요한 동작을 수행하는 것이 제한될 수 있습니다.]

 

객체가 자료형이면 DB에는 어떻게 값이 들어가지?

실제로 DB에 저장될 때는 School 객체의 기본키 값이 schoolId 열에 저장됩니다. 기본키 값은 School 객체의 주요 식별자로 사용되며, 해당 객체의 특정 인스턴스를 고유하게 식별할 수 있게 해 줍니다.

따라서 DB에는 School이라는 자료형이 직접 저장되는 것이 아니라, schoolId 열에 해당하는 School 객체의 기본키 값이 저장됩니다. 이를 통해 객체 간의 관계를 유지하면서 DB에 데이터를 저장하고 조회할 수 있게 됩니다.