스프링부트 연관관계

런던행·2022년 3월 1일
0

스프링부트

목록 보기
2/4

다대일

@ManyToOne 어노테이션이션 속성

  • fetch : 글로벌 페치 전략을 설정 아래는 기본 값
    @manyToOne : Eager
    @OntToMany : Lazy
  • optional : 연관된 엔티티가 반드시 있어야 하는지의 여부를 결정한다.

엔티티


@Getter
@Setter
@ToString(exclude="member")
@Entity
public class Board {
	@Id
	@GeneratedValue
	private Long seq;
	
	private String title;
	private String writer;
	private String content;
	@Temporal(value = TemporalType.TIMESTAMP)
	private Date createDate;
	private Long cnt;
	
	@ManyToOne // 다대일
	@JoinColumn(name="MEMBER_ID", nullable=false)  // 외래키맵핑, nullable=false해야 join시 inner를 한다. 
	private Member member;
}

@Getter
@Setter
@ToString(exclude="boadList")
@Entity
public class Member {
	
	@Id
	@Column(name="MEMBER_ID")
	private String id;
	private String password;
	private String name;
	private String role;
}

레파지토리

package com.rubypaper.persistence;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;

import com.rubypaper.domain.Board;

public interface BoardRepository extends CrudRepository<Board, Long>{

	List<Board> findByTitle(String searchKeyword);
	
//	List<Board> findByTitleContaining(String keyword, Pageable paging);
	Page<Board> findByTitleContaining(String keyword, Pageable paging);

}

package com.rubypaper.persistence;

import org.springframework.data.repository.CrudRepository;

import com.rubypaper.domain.Member;

public interface MemberRepository extends CrudRepository<Member, String>{

}

맵핑 테스트코드

package com.rubypaper;

import java.util.Date;
import java.util.List;

import org.junit.Before;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.test.context.junit4.SpringRunner;

import com.rubypaper.domain.Board;
import com.rubypaper.domain.Member;
import com.rubypaper.persistence.BoardRepository;
import com.rubypaper.persistence.MemberRepository;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RelationMappingTest {
	
	@Autowired
	private BoardRepository boardRepo;
	
	@Autowired
	private MemberRepository memberRepo;
	
	/**
	 일다대 관계설정
	 */
	@Test
	public void testManyToOneInsert() {
		Member member1 = new Member();
		member1.setId("member1");
		member1.setPassword("p");
		member1.setName("user1");
		member1.setRole("User");
//		memberRepo.save(member1);
		
		Board board = new Board();
		board.setTitle("member1 title");
		board.setContent("member1 conent");
		board.setMember(member1);
//		boardRepo.save(board);
		
		memberRepo.save(member1);  // cascade=CascadeType.ALL 영속성 전이
	}
	
	/**
	 게시글 상세 조회 테스트
	 */
	@Test
	public void testManyToOnSelect() {
		Board board = boardRepo.findById(1L).get();
		System.out.println(board.getMember().getName());

	}
	
	@Test
	public void testTwoWayMapping() {
		Member member = memberRepo.findById("member1").get();
		
		List<Board> list = member.getBoardList();
		
		for (Board board : list) {
			System.out.println(board.toString());
		}
	}	
}
profile
unit test, tdd, bdd, laravel, django, android native, vuejs, react, embedded linux, typescript

0개의 댓글