해결된 질문
작성
·
214
0
Postgresql DB 사용시 auto_increment 옵션이 업어서
아래와 같이 작성하여 order등록 테스트 진행시 id 값이 null 이어서 에러가 나타납니다.
create table orders (
id int primary key,
user_id varchar(50) not null,
product_id varchar(20) not null,
order_id varchar(50) not null,
qty int default 0,
unit_price int default 0,
total_price int default 0,
created_at datetime default now()
)
테이블을 직접 생성하지 않고 소스의 jpa의 create 옵션을 사용하여 orders 테이블을 생성하고 상품을 등록하면 id 값이 자동으로 등록이 되는되 내부적으로 id값이 맵핑되는 로직이 따로 존재 하는 건가요?
테이블을 수동으로 생성 후 id 값을 맵핑시킬수 있는 로직이 따론 존재 하는 걸까요?
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
hibnos님께서 Spring에서 Postgresql 데이터베이스와 연동하는 과정에서 auto_increment
옵션에 대한 문의를 주셨군요.
Postgresql에서는 auto_increment
옵션 대신 SERIAL
혹은 BIGSERIAL
데이터 타입을 사용하여 자동으로 증가하는 정수 값을 처리합니다. 질문하신 내용과 관련하여, 아래와 같이 테이블을 생성할 때 id
컬럼에 SERIAL
타입을 지정하면 자동으로 값이 증가하게 됩니다.
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id VARCHAR(50) NOT NULL,
product_id VARCHAR(20) NOT NULL,
order_id VARCHAR(50) NOT NULL,
qty INT DEFAULT 0,
unit_price INT DEFAULT 0,
total_price INT DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW()
);
JPA를 사용하여 테이블을 생성하는 경우 @Id
와 @GeneratedValue
어노테이션을 사용해주셨는데, 매핑된 엔티티의 id
필드에 GenerationType.IDENTITY
전략을 적용하면 데이터베이스가 제공하는 자동 증가 기능을 사용하여 id
값을 자동으로 할당 받을 수 있습니다. Postgresql의 SERIAL
타입과 이 설정은 호환되어 정상 작동합니다.
만약 데이터베이스에 테이블을 수동으로 생성했고, JPA를 사용해 자동으로 id
값을 생성하고 싶다면, @Id
와 @GeneratedValue
어노테이션의 사용법을 그대로 유지하면서 테이블의 id
컬럼 타입을 SERIAL
로 지정해주시면 됩니다.
JPA의 Entity 상태나 ID 생성 메커니즘에 대해서는 Spring Data JDBC 문서의 “ID Generation” 섹션에 자세한 정보가 있으니 참고하는 것도 도움이 될 것입니다.
혹시 다른 설정이나 더 궁금한 점이 있으시면 추가로 문의해주세요.