게시판과 회원은 단방향으로 게시판은 회원 참조
회원은 게시판에 대한 참조 정보를 가지지 않음
@Data
@Entity
public class Board {
@Id
@GeneratedValue
private Integer seq;
private String title;
// private String writer;
private String content;
@Temporal(value = TemporalType.TIMESTAMP)
private Date createDate;
private Integer cnt;
// 연관관계 매핑
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
}
@Test
public void manyToOneInsert(){
// member
Member member = new Member();
member.setId("member1");
member.setName("나다");
member.setPassword("1212");
member.setRole("User");
// 저장
memberRepository.save(member);
// board
for(int i = 1; i <=3; i++){
Board board = new Board();
board.setMember(member);
board.setTitle("게시글제목"+i);
board.setContent("게시글 내용입니다"+i);
board.setCreateDate(new Date());
board.setCnt(0);
// 저장
boardRepository.save(board);
}
}
엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야함
실행 결과
@Test
public void manyToOneSelect(){
// 조회
Board board = boardRepository.findById(3).get();
// 결과 정보 출력
System.out.println("[ "+board.getSeq()+" 번 게시물 정보 ]");
System.out.println("제목 : "+ board.getTitle());
System.out.println("내용 : "+ board.getContent());
// board의 member 정보 출력
System.out.println("작성자 : "+ board.getMember().getName());
System.out.println("작성자 권한 : "+ board.getMember().getRole());
}
@ManyToOne 어노테이션의 패치 속성의 기본은 EAGER으로 select 결과에 외부 조인(outer join)이 처리됨
// 연관관계 매핑
@ManyToOne
@JoinColumn(name = "MEMBER_ID", nullable=false)
private Member member;
게시판 관점에서 멤버는 다대일 관계
멤버 관점에서 게시판은 일대다 관계 -> 일대다 관계는 List와 같은 컬렉션 사용해야함
@Data
@Entity
@ToString(exclude = "boardList")
public class Member {
@Id
private String id;
private String password;
private String name;
private String role;
@OneToMany(mappedBy = "member", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Board> boardList= new ArrayList<>();
}
@ToString(exclude = "boardList")
https://ultrakain.gitbooks.io/jpa/content/chapter5/chapter5.html
https://hongchangsub.com/jpa-cascade-2/