728x90
기본 구조 설명
JPA에서는 DB 테이블을 애플리케이션이 실행될 때 자동으로 생성해주는 기능이 있다. 예를 들어, User
와 Team
두 엔티티가 있다고 가정하자.
- User: 사용자
- Team: 팀
관계는 다음과 같다:
- 하나의 팀(
Team
)에는 여러 명의 유저(User
)가 속할 수 있다. - 한 유저는 하나의 팀에만 속할 수 있다.
즉, JPA의 연관관계로 표현하면 다음과 같다:
// User.java
@ManyToOne
private Team team;
// Team.java
@OneToMany(mappedBy = "team")
private List<User> users;
application.yml 설정
자동 테이블 생성을 위해 application.yml
에 아래와 같이 설정을 추가한다.
spring:
jpa:
generate-ddl: true
hibernate:
ddl-auto: create
- generate-ddl: true → 서버 시작 시 DDL 생성 여부
- ddl-auto: create → DDL 실행 전략 설정
ddl-auto 전략 설명
전략 | 설명 |
---|---|
none |
DDL 실행 안 함 (기본값) |
create |
기존 테이블 제거 후 다시 생성 |
create-drop |
앱 실행 시 테이블 생성, 종료 시 제거 |
update |
변경된 엔티티 정보만 적용 (운영 환경에서는 주의) |
validate |
엔티티와 DB 스키마 비교. 다르면 오류 발생 |
정리
- JPA는 연관관계를 통해 객체지향적으로 테이블을 설계할 수 있게 해준다.
ddl-auto
옵션은 학습이나 개발 환경에서는create
또는update
를, 운영 환경에서는validate
또는none
을 권장한다.- 양방향 연관관계를 사용할 땐 무한 루프 주의 (→
@ToString(exclude = ...)
사용)
728x90
반응형
'DB > JPA' 카테고리의 다른 글
JPA 양방향 연관관계에서 StackOverflowError 발생한 이유와 해결 (0) | 2021.07.18 |
---|---|
질문할 때 DB 테이블 구조를 깔끔하게 올리는 방법과 JPA 관계 매핑 정리 (0) | 2020.10.12 |
JPA 양방향 매핑 시 발생한 무한 순환 참조 에러 (0) | 2020.10.12 |
JPA에서 단일 데이터 조회하기 (0) | 2020.10.07 |
JPA에서 @Transient 사용하기 (0) | 2020.09.26 |