인프런 커뮤니티 질문&답변

최정식님의 프로필 이미지
최정식

작성한 질문수

[개념은 호옹~, 실습 빡] 스프링 부트, 입문!

22 댓글 엔티티와 리파지터리(댓글 달기 전, 테스트 한번 하쉴?)

22강 관련질문

작성

·

181

0

Comment객체에는 Article객체를 하나의 column으로 가지고 있는데 이는 외래키와의 매핑하고 매핑되는 column을 article_id라고 정하는 것은 이해를 했습니다 하지만
Comment a = new Comment(1L, article, "Park", "굳 윌 헌팅");

위 코드처럼 article을 인수로 넘겨주면 article안에는 id, title, content라는 여러 column이 있는데 이중에 왜 id값이 선택되는지 궁금합니다

예시로 data.sql에서
INSERT INTO comment(article_id, nickname, body) VALUES(4, 'Park', '굳 윌 헌팅');

이런 sql문을 넣는데 article_id라는 column은 Article타입인데 정수(Long)를 넣어도 어떻게 성립이 되는건지 궁금합니다.

답변 2

1

홍팍님의 프로필 이미지
홍팍
지식공유자

해당강의는
스프링부트 입문강의로
JPA와 관련된 자세한 내용은
다루지 않습니다만,

간단히 말씀드리자면
JPA가 자동으로 기본키(PK)를 찾고
이를 테이블에 알아서 저장해 줍니다

Article 엔티티 선언 시
@Id로 선언한 필드가
자동으로 PK로 인식되게 됩니다

 

홍팍님의 프로필 이미지
홍팍
지식공유자

PS.

article_id라는 column은
Article 타입이 아닌
bigint 타입입니다

0

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

Comment 클래와 Article 클래스 사이의 관계를 맺을 때, 구현한 ORM(Object-Relational Mapping) 기술에 의하여 객체와 테이블 간의 매핑이 정의됩니다. Spring에서는 @Entity 어노테이션을 사용해 클래스를 엔티티로 선언하고, 이 클래스의 필드를 테이블의 컬럼에 매핑합니다. 때문에, 여러분의 Comment 클래스에는 Article 객체를 참조하는 필드가 있고 이 필드는 @ManyToOne 또는 @JoinColumn 같은 어노테이션을 통해 외래키 컬럼에 매핑됩니다.

Article 객체를 Comment 객체에 할당하게 되면, ORM 프레임워크(예: Hibernate)는 Article 객체의 식별자(Primary key)를 사용하여 데이터베이스의 외래키 컬럼(article_id)에 값을 설정합니다. 그렇기 때문에 실제 데이터베이스 트랜잭션은 Article ID 값만을 외래키로서 사용하게 됩니다.

INSERT INTO comment(article_id, nickname, body) VALUES(4, 'Park', '굋 윌 헌팅'); SQL 명령문과 같이 수동으로 데이터를 삽입할 때는 외래키로 사용될 Article의 ID 값을 직접 지정합니다. article_id 컬럼은 실제로는 Article 테이블의 기본키에 해당하는 ID 값을 저장하기 위한 컬럼이기 때문에 정수(Long) 형태의 ID 값이 사용됩니다.

스프링 부트 또는 ORM 관련 문서를 참고하시면 여러분이 작성하는 매핑과 트랜잭션 과정에 더 자세한 이해를 할 수 있습니다.

참고 자료:
- Spring Boot Reference Documentation v3.1.5: SQL Databases
- Spring Data JDBC - Reference Documentation v3.1.5: ID Generation

최정식님의 프로필 이미지
최정식

작성한 질문수

질문하기