JPA 관계 설정
JPA 에서 조인이란?
@(어노테이션)을 이용해서 조인한다.
( 자동 FK , 컬럼 생성 )
관계를 보자
부모 - 자식 관계 : 1 : N(다) - @OneToMany(부서) , @ManyToOne(사원)
(부서) (사원) 1 : 1 - @OneToOne(핸드폰) , @OneToOne(사람)
N : N - @ManyToMany (x)
1 : 1 관계
@OneToOne
1 대 1 관계에서는 부모 자식 역할을 아무나 하면 된다.
예제
사람 : 부모
핸드폰 : 자식
Person
@Entity // JPA 기능을 클래스에 부여하는 어노테이션
@Table(name = "TB_PERSON") // 테이블 명 지정
// JPA 어노테이션 SQL 문 자동 생성시 NULL 값 컬럼은 제외하고 생성하는 어노테이션
@DynamicInsert
@DynamicUpdate
@SequenceGenerator( // 시퀀스 설정
name = "SQ_PERSON_GENERATOR" // 시퀀스 함수이름
, sequenceName = "SQ_PERSON" // DB에 생성된 시퀀스 이름
, initialValue = 1 // 시작값
, allocationSize = 1 // JPA에서 관리용 숫자(성능지표) : 그냥 1 넣어주면 됨
)
// 밑에는 기본 lombok 어노테이션 들
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Person extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator = "SQ_PERSON")
@Column(columnDefinition = "NUMBER")
private Integer no; // 기본 키
@Column(columnDefinition = "VARCHAR2(255)")
private String name;
@Column(columnDefinition = "VARCHAR2(255)")
private String job;
// TODO: 1 : 1 관계 설정 :@OneToOne(사람 : 부모) , @OneToOne (폰 : 자식)
// 사용법 : @OneToOne(mappedby = "자식속성명")
@OneToOne(mappedBy = "person")
// TODO: 순환 참조 해결
@JsonManagedReference
private Phone phone;
}
Phone
( JoinColumn 을 사용하면 자동으로 no 컬럼을 만들어 준다. )
@Entity // JPA 기능을 클래스에 부여하는 어노테이션
@Table(name = "TB_PHONE") // 테이블 명 지정
// JPA 어노테이션 SQL 문 자동 생성시 NULL 값 컬럼은 제외하고 생성하는 어노테이션
@DynamicInsert
@DynamicUpdate
@SequenceGenerator( // 시퀀스 설정
name = "SQ_PHONE_GENERATOR" // 시퀀스 함수이름
, sequenceName = "SQ_PHONE" // DB에 생성된 시퀀스 이름
, initialValue = 1 // 시작값
, allocationSize = 1 // JPA에서 관리용 숫자(성능지표) : 그냥 1 넣어주면 됨
)
// 밑에는 기본 lombok 어노테이션 들
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Phone extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "SQ_PHONE")
@Column(columnDefinition = "NUMBER")
private Integer pno;
@Column(columnDefinition = "VARCHAR2(255)")
private String pname;
@Column(columnDefinition = "VARCHAR2(255)")
private String vendor;
// TODO : 1 : 1 관계
@OneToOne(fetch = FetchType.LAZY,optional = false)
// TODO: JoinColumn(name="부모공통컬럼")
@JoinColumn(name="no")
@JsonBackReference
private Person person;
}
'SpringBoot > JPA' 카테고리의 다른 글
SpringBoot - CSR 과 연동 시 주의점 (CORS) 설정 (0) | 2023.10.19 |
---|---|
SpringBoot - Hard Delete 와 Soft Delete 개념 (0) | 2023.10.19 |
SpringBoot - JPA - 조인 ( 1 대 다 관계 ) (0) | 2023.10.19 |
SpringBoot - JPA - 페이징 처리 (1) | 2023.10.18 |
SpringBoot - JPA - 쿼리 메소드와 @Query 어노테이션 (0) | 2023.10.17 |