@ManyToOne 어노테이션이션 속성
@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());
}
}
}