728x90
반응형
Master : board (PK - id / FK - userid)
Detail : member (PK - id)
board 테이블의 userid컬럼은 member테이블의 id 컬럼을 참조합니다.
아래와 같이 Entity 클래스를 구현합니다.
@Entity
@Table(name="board")
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
@Column
private String content;
/* Join - member Entity의 userid와 연결되어있다.
* member테이블과 함께 조회할때 사용.
* 어떤 회원이 쓴 게시글인지 확인하기 위해서 사용. */
@ManyToOne
@JoinColumn(name="userid") //fk userid이다 Member테이블의 id를 참조한다.
private Member member;
public Member getMember() { //핵심
return member;
}
// ...이하 setter/getter 및 toString 생략
}
@Entity
@Table(name="member")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // 아이디를 디비에서 자동으로 만들어주는 전략을 설정한다.
private String name;
private String phone;
private String email;
private String address;
// ...이하 setter/getter 및 toString 생략
}
LEFT JOIN
핵심코드는 아래와 같습니다.
@ManyToOne
@JoinColumn(name="userid") //fk userid이다 Member테이블의 id를 참조한다.
private Member member;
public Member getMember() { //핵심
return member;
}
member 엔티티로부터 다대일 관계를 갖도록 지정해주고 (다시말해 board엔티티로 부터 member엔티티는 일대다관계)
조인컬럼을 설정한 후 엔티티객체의 getter를 선언하면 자동으로 LeftOuterJoin이 실행됩니다.
왜 다대일인지 설명하겠습니다.
한명의 회원 id로 작성된 여러개의 게시글이 존재할수 있습니다.
한명의 Member는 여러개의 Board를 갖는다 라고 정의할 수 있으며,
따라서 Member 입장에서 봤을 때 한명의 회원은 여러개의 게시글을 갖게되는 일대 다 관계가 되며,
역으로 Board입장에서 본다면 한명의 회원에 속하게 되므로 다대일 관계 - Many to one이 됩니다.
INNER JOIN
@ManyToOne(option = false)
위와 같이 @ManyToOne Annotation의 option속성을 false로 설정한다면, member가 null인 값을 허용하지 않게된다.
그 결과는 innerJoin이고 콘솔창에 출력되는 쿼리문의 LeftOuterJoin이 InnerJoin으로 변경되서 출력된다.
추후 정리 예정입니다.
728x90
반응형
'Hibernate > JPA(EntityManager)' 카테고리의 다른 글
[JPA] @OneToOne 단방향/양방향 - 외래키 정책 기준 (1) | 2023.06.29 |
---|---|
[JPA] @OneToMany 단방향 / 양방향 - 외래키 관리 이해한 내용 정리 (0) | 2023.06.29 |
[JPA] @ManyToOne 단방향 / @ManyToOne <=> @OneToMany 양방향 정리 (0) | 2023.06.28 |
[JPA] JPQL 및 queryDSL 사용자정의 함수 등록법 (MySql) (0) | 2023.06.21 |
JPA EntityManager - Entity 기본 구현 및 SELECT, INSERT, UPDATE, DELETE (0) | 2023.04.15 |