강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của c50707345634
c50707345634

câu hỏi đã được viết

[Khái niệm hay, khó thực hành] Spring Boot, giới thiệu!

22 Entity và Repository của Bình luận (Trước khi đăng bình luận, thử nghiệm một lần nhé?)

22강 관련질문

Viết

·

289

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)를 넣어도 어떻게 성립이 되는건지 궁금합니다.

spring-boot

Câu trả lời 2

1

hongpark님의 프로필 이미지
hongpark
Người chia sẻ kiến thức

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

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

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

 

hongpark님의 프로필 이미지
hongpark
Người chia sẻ kiến thức

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

Hình ảnh hồ sơ của c50707345634
c50707345634

câu hỏi đã được viết

Đặt câu hỏi