작성
·
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로 인식되게 됩니다
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
PS.
article_id라는 column은
Article 타입이 아닌
bigint 타입입니다