티스토리 뷰

Spring Boot

[Spring Boot]JPA 연관관계

JxxxxH 2024. 8. 20. 23:55

JAP에서의 연관관계& ERD의 연관관계(단방향)

  1. @OneToOne
  2. @OneToMany
  3. @ManyToOne
  4. @ManyToMany

JAP는 방향 설정이 필요

  • 단방향 참조 : 한쪽의 클래스만이 다른 클래스의 인스턴스 참조
  • 양방향 참조 : 양쪽 클래스 모두 다른 클래스의 인스턴스 참조
@Table(name = "t_member")
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class MemberEntity {
	
	@Id //Primary Key
	String mid;
	String mpassword;
	String mname;
	@Enumerated(EnumType.STRING) //기본은 순서 ordinal이 입력됨. Enum 문자타입
	MemberRole mrole; 
	//USER, MANAGER, ADMIN 권한이 3개 뿐이라 Enum으로 만듦
}
@Table(name = "t_profile")
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class ProfileEntity {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) //자동으로 값 증가
	long fno;
	String fname;
	boolean currentYn;
	
	//여러개의 Profile이 하나의 Member의 소유이다.
	@ManyToOne           //하나의 member는 여러개의 Profile를 갖는다.
	MemberEntity member; //참조
	//칼럼 이름은 field이름_field
	//member_mid칼럼이 생성된다.
}

 

 


양방향 처리

양방향 처리  - 연관관계 설정

①@OneToMany로 인해 중간 테이블이 생성된다.

(@JoinColumn를 사용하면 반대쪽에 칼럼이 추가되고 중간 테이블은 생기지 않는다)

②중간테이블을 생성하지않고  PK, FK를 지정하여 관계를 맺을 수 있다.

PK쪽에서 mappedBy를 이용하여 자신이 다른 객체에 매여있음을 명시한다.

④“매여있다”게시글의 댓글이 존재한다면 게시글을 지울 수 없다의 의미이다.

⑤mappedBy 에는 참조한 쪽의 변수를 지정한다.

⑥tbl_free_replies 테이블에 board_bno칼럼이 추가된다.

⑦board의 댓글수를 가져오기위해 지연로딩을 즉시로딩으로 변경한다. (EAGER)

⑧지연로딩을 사용하는 경우는 연관관계 정보를 가져오기 위해 @Transactinal을 사용한다. (LAZY)

양방향 설정을 사용하는 경우 ToString에 주의한다. (무한루프)

 

 

mappedBy

-

 

FetchType

LAZY, EAGER

LAZY인 경우 연관관계인 Entity는 조회하지 않는다.

System.out.println(board); 에서 오류남. ⇒ @Data(ToString포함되어있음)때문에

@ToString(exclude = {"files"})로 제거해주면 됨.

중간 테이블

@JoinColumn(조인칼럼)이 생략되면 중간테이블이 생성된다.

Join / Joinfetch

▶**양방향 처리  - @**Query 사용 ( JOIN )  N+1문제

▶**양방향 처리  - @**Query 사용 ( JOIN  fetch )  N+1문제해결

 

 

 

 

 

'Spring Boot' 카테고리의 다른 글

JPA(Java Persistence API)  (0) 2024.08.21
카카오맵API 키워드로 주소 찾기 오류 정리  (0) 2024.08.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함