본문으로 바로가기

05.JPA02①

category IT/SpringDay 2022. 5. 19. 20:37

1. 프로젝트 생성

* 설정해주었던 dependencies가 build.gradle에 나타나 있는 것을 확인 할 수 있다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

 

2. domin 

1) Member

- @Getter, @Setter 어노테이션 사용하여 Getter,Setter 만들어 줌 -> 코드의 간결화

- 시퀀스 생성

  @SequenceGenerator(name = 객체이름(변수라고 생각하자),   sequenceName = DB에 만들어지는 이름,

                                     initialValue = 시작번호,      allocationSize = 증가값)

- @Column(name = 컬럼명, length = 길이)

- @Transient 메모리상에서 임시로 어떤 값을 보관하고 싶을 때 사용, 데이터 베이스 저장 X

package com.oracle.oBootJpa02.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
@SequenceGenerator(name         ="member_seq_gen", 			//객체이름
		           sequenceName = "member_seq_generator", 	//맵핑할 DB 시퀀스 이름
		           initialValue = 1,						//시작번호
		           allocationSize = 1						//증가수
				   )
@Table(name="member1") //디폴트는 클래스명. 테이블 이름 별도로 지정
public class Member {

	@Id
	@GeneratedValue(
				    strategy = GenerationType.SEQUENCE,		//전략
				    generator = "member_seq_gen"
			)
	@Column(name = "member_id")
	private Long id;
	@Column(name = "user_name", length = 50)		//컬럼 이름/사이즈
	private String name;
	
	@ManyToOne //FK  다 대 1 원칙
	@JoinColumn(name= "team_id")
	private Team team;
	
	@Transient
	private Long teamid;
	@Transient //메모리상에서 임시로 어떤 값을 보관하고 싶을 때 사용, 데이터 베이스 저장 X
	private String teamname;
}

2) Team

- MemberTable과 연결(FK)

  @ManyToOne
  @JoinColumn(name= "team_id")
  private Team team;

package com.oracle.oBootJpa02.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;

import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
@SequenceGenerator( name="team_seq_gen",
					sequenceName = "team_seq_generator",
					initialValue = 1,
					allocationSize = 1
		)
public class Team {

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "team_seq_gen")
	private Long team_id;
	@Column(name = "teamname")
	private String name;
	
}

 

3. repository 

@Override
	public Member save(Member member) {
		//팀 저장
		Team team = new Team();
		team.setName(member.getTeamname());
		System.out.println("team persist 전");
		em.persist(team);
		System.out.println("team persist 후");
		//회원 저장
		member.setTeam(team);	//단방향 연관 관계 설정
		System.out.println("member persist 전");
		em.persist(member);
		System.out.println("member persist 후");
		
		return member;
	}

1. team persist  -> 영속성 컨텍스트에 저장 되어 있음. 값을 가져오기위해 team_seq는 실행됨.  DB저장 x

2. member persist -> 영속성 컨텍스트에 저장 되어 있음. 값을 가져오기위해 member_seq는 실행됨.  DB저장 x

3. service 단에서 트랜잭션 실시. insert 문 실행.

'IT > SpringDay' 카테고리의 다른 글

06.JpaApi①  (0) 2022.05.22
05.JPA02②  (0) 2022.05.19
Lombok설치  (0) 2022.05.19
05.JPA③-Member List 조회  (0) 2022.05.19
05.JPA②-Member 신규 생성  (0) 2022.05.19