참고
프로젝트 환경설정
프로젝트 생성
설정 코드
NOTE
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/datajpa
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
show_sql: true
format_sql: true
logging.level:
org.hibernate.SQL: Debug
#org.hibernate.type: trace
YAML
복사
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Groovy
복사
h2 데이터베이스는 설치가 되었다고 가정하고 진행한다.
예제 도메인 모델
NOTE
Member와 Team 2개의 엔티티를 구현하고 연관관계를 맺어준다.
엔티티 클래스
Meber와 Team은 N 대 1 관계이다.
ERD
외래키는 Member에서 가지고 있는다.
코드
@Entity
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
public class Member {
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
private String userName;
private int age;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "team_id")
@ToString.Exclude
private Team team;
public Member(String userName){
this.userName = userName;
}
public Member(String userName, int age, Team team) {
this.userName = userName;
this.age = age;
if (team != null) {
changeTeam(team);
}
}
public void changeTeam(Team team){
this.team = team;
team.getMembers().add(this);
}
}
Java
복사
@Entity
@Getter
@Setter
@NoArgsConstructor
@ToString
public class Team {
@Id
@GeneratedValue
@Column(name = "team_id")
private Long id;
private String name;
@OneToMany(mappedBy = "team")
@ToString.Exclude
private List<Member> members = new ArrayList<>();
public Team(String userName) {
this.name = userName;
}
}
Java
복사