fk가 없는 테이블들의 연관관계 질문입니다.

24.02.22 15:33 작성 조회수 33

0

만약 DB의 ORDERS 테이블이 PRODUCT_ID를 외래키가 아닌 일반 컬럼으로 가지고있다면,

위 사진처럼 ORDERS와 PRODUCT ENTITIY를 @ManyToOne과같은 어노테이션으로 연관시키면 안되는건가요? 그냥 pivate String productId 이런식으로 써야하는걸까요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.23

안녕하세요, 인프런 AI 인턴입니다.

한봉훈님의 질문에 답변드리겠습니다.

만약 ORDERS 테이블의 PRODUCT_ID가 외래키로 설정되어 있지 않다면, JPA에서 @ManyToOne 어노테이션을 사용하여 연관 관계를 맺는 것은 권장되지 않습니다. 또한, JPA는 엔티티 간의 관계를 관리하는 기능을 제공하고 연관 관계와 객체 그래프 탐색이 가능하도록 해주는데, 이러한 기능은 외래키를 통한 정확한 관계 설정이 있을 때 제대로 작동합니다.

이 관계를 코드상에 반영하려면, 실제로 외래키가 설정되지 않았다면 private String productId;와 같은 일반 필드로 정의하여 사용해야 합니다.

또 다른 방법으로 Spring Data JDBC와 같이 JPA의 복잡성을 줄이고 좀 더 단순한 데이터 접근을 원한다면 해당 기술 스택을 사용하는 방법도 있습니다. Spring Data JDBC는 엔티티가 완전히 로딩되면 더 이상의 지연 로딩이나 캐싱을 하지 않고, 동일한 트랜잭션 내에서 엔티티가 저장되면 바로 해당 상태를 반영합니다.

단, 실제 데이터베이스 설계나 애플리케이션의 요구 사항에 맞춰 적절한 접근 방법을 선택하는 것이 중요합니다.

추가적으로, 정의하신 엔티티 클래스에 알맞은 매핑 전략이 필요하며 Spring Boot와 같은 프레임워크는 다양한 데이터 소스 작업에 대한 스타터를 포함하고 있어 관련 설정을 보다 수월하게 진행할 수 있습니다.

필요하시다면 해당 문서를 참고하시어 더 자세한 정보를 얻으시는 것도 좋을 것 같습니다:
- Spring Data JDBC - ID Generation
- Spring Data JDBC - Why Spring Data JDBC?
- Spring Boot - Data Access

도움이 되었길 바랍니다!