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

김태현님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

JPA와 DB 설정, 동작확인

파라미터 로깅 관련 질문

작성

·

269

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

Hibernate:

drop table if exists member

Hibernate:

create table member (

id bigint not null auto_increment,

username varchar(255),

primary key (id)

) engine=InnoDB

Hibernate:

insert

into

member

(username)

values

(?)

insert시에 id 값이 보이지 않는 이유가 무엇일까요 ㅠㅠ
파라미터는 id, username 2개가 나와야 하는데 1개만 나와서 질문 드립니다.

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.type=trace


p6spy도 똑같이 하나만 나오더라구요

답변 1

0

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

김태현님의 질문은 id값이 insert 쿼리에 보이지 않는 이유에 대한 것으로 이해했습니다. 이 문제는 JPA와 Hibernate가 실제로 데이터베이스에 데이터를 삽입할 때 어떻게 동작하는지에 대한 이해를 요구합니다.

JPA를 사용할 때, id필드가 자동 생성되도록 설정되어 있는 엔티티의 경우, 실제 INSERT 쿼리에서 id 값을 명시적으로 제공하지 않습니다. 이는 id가 데이터베이스에 의해 자동으로 생성되기 때문인데요 (예: AUTO_INCREMENT 옵션을 사용한 MySQL, SERIAL을 사용한 PostgreSQL 등). 따라서, Hibernate가 실행하는 실제 INSERT 쿼리에는 id가 포함되지 않는 것이 정상입니다.

이와 관련하여 유사한 질문에 대한 답변은 다음 링크에서 찾아볼 수 있습니다. 해당 답변은 질문이 다소 다를 수 있으나, JPA와 Hibernate가 어떻게 파라미터와 함께 동작하는지 이해하는 데 도움이 될 수 있습니다:

이 링크에서는 Hibernate가 생성하는 쿼리의 형태와 기대하는 쿼리와의 차이점에 대해 설명하고 있으며, 테이블 속성명이나 변수명 등이 쿼리 로그에 어떻게 표시되는지에 대한 설명이 포함되어 있습니다.

단, 귀하의 경우에는 주로 id 필드의 자동 생성과 관련된 동작에 초점을 맞추어야 할 것 같습니다. 대부분의 경우 JPA에서는 엔티티의 id 필드에 대해 @Id@GeneratedValue 어노테이션을 사용하여 이를 자동으로 관리합니다. 그로 인해 실제 쿼리에는 id 값의 할당이 포함되지 않으멖, 데이터베이스가 자동으로 처리하게 됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.