Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 자료구조와 함께 배우는 알고리즘 입문
- 리눅스
- 알파회계
- network configuration
- 이터레이터
- 처음 만나는 AI 수학 with Python
- GIT
- iterator
- 네트워크 설정
- d
- 서버설정
- resttemplate
- baeldung
- 데비안
- Kernighan의 C언어 프로그래밍
- 티스토리 쿠키 삭제
- 친절한SQL튜닝
- 자바편
- 구멍가게코딩단
- ㅒ
- 코드로배우는스프링웹프로젝트
- 목록처리
- 처음 만나는 AI수학 with Python
- 스프링부트핵심가이드
- 자료구조와함께배우는알고리즘입문
- /etc/network/interfaces
- 선형대수
- 페이징
- 코드로배우는스프링부트웹프로젝트
- 스프링 시큐리티
Archives
- Today
- Total
bright jazz music
[bootBoard] N:1(다대일) 연관관계: 3. 프로젝트 구성 요소 작성(추가) 본문
Framework/Spring
[bootBoard] N:1(다대일) 연관관계: 3. 프로젝트 구성 요소 작성(추가)
bright jazz music 2022. 7. 26. 22:311. entity 패키지 생성하고 BaseEntity.java 추가하기
- entity 패키지는 이후 추가할 엔티티 클래스들을 보관하는 용도로 사용한다.
- BaseEntity는 추후 작성할 엔티티클래스들이 상속(extends) 할 클래스이다.

package com.example.bootboard.entity;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@MappedSuperclass
@EntityListeners(value = {AuditingEntityListener.class})
@Getter
public class BaseEntity {
@CreatedDate
@Column(name = "regDate", updatable = false)
private LocalDateTime regDate;
@LastModifiedDate
@Column(name="moddate")
private LocalDateTime modDate;
}
/*
* @MappedSuperclass:
* 이 어노테이션이 적용되면 적용되면 테이블로 생성되지 않는다.
* 실제 테이블은 BaseEntity클래스를 상속한 엔티티의 클래스로 DB 테이블이 생성된다.
*
* @CreatedDate:
* JPA에서 엔티티의 생성 시간을 처리한다.
*
* @LastModifiedDate:
* 최종시간을 자동으로 처리하는 용도로 사용된다.
* 칼럼의 속성으로는 insertable, updatable이 있다. 여기서는 updatable=false로 지정했기 때문에
* 해당 엔티티 객체를 DB에 반영할 때 regDate 칼럼은 변경되지 않는다. 생성될 때만 기록되야 하니 당연하다.
*
*
*
*/
2. BootBoardApplication.java에 @EnableJpaAuditing 추가하기
package com.example.bootboard;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@SpringBootApplication
@EnableJpaAuditing //AuditingEntityListener 활성화를 위해 추가
public class BootBoardApplication {
public static void main(String[] args) {
SpringApplication.run(BootBoardApplication.class, args);
}
}
3. 엔티티 클래스 추가
- 연관관계의 설정은 처음부터 설정하는 방식보다 엔티티의 클래스들을 구성한 이후에 각 엔티티 클래스 간의 연관관계를 고려하여 설정하는 것이 수월하다.
- entity 패키지에 Member(회원), Board(게시물), Reply(댓글) 엔티티 클래스를 추가한다.

3-1. Member 클래스 작성
- Member 클래스는 이메일 주소를 PK로 이용한다.
- DB설계에서도 member 테이블은 PK만을 가지고 있고, FK를 사용하지 않는다.
- 따라서 별도의 참조가 필요하지 않다.
package com.example.bootboard.entity;
import lombok.*;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Member extends BaseEntity{
@Id
private String email;
private String password;
private String name;
}
/*
* Member 클래스는 이메일 주소를 PK로 이용한다.
* DB설계에서도 member 테이블은 PK만을 가지고 있고, FK를 사용하지 않는다.
* 따라서 별도의 참조가 필요하지 않다.
*
* */
3-2. Board 클래스 작성
- Board클래스는 Member클래스의 email(PK)를 FK로 참조하는 구조이다.
- 초기의 설정이므로 우선 연관관계를 제외하고 작성한다.
- 추후 회원과의 연관관계를 고려해서 작성자(writer)에 해당하는 필드는 작성하지 않는다.
package com.example.bootboard.entity;
import lombok.*;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Board extends BaseEntity{
@Id
@GeneratedValue
private Long bno;
private String title;
private String content;
//Board클래스는 Member클래스의 email(PK)를 FK로 참조하는 구조이다.
}
3-3. Reply 클래스 작성
- Reply 클래스는 회원이 아닌 사람도 댓글을 남길 수 있다고 가정하고 Board와의 연관관계를 맺지 않는다.
//Reply.java
package com.example.bootboard.entity;
import lombok.*;
import javax.persistence.*;
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Reply extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long rno;
private String text;
@ManyToOne
private Board board;
}
'Framework > Spring' 카테고리의 다른 글
| 스프링 부트 DB 설정 없이 구동하는 법 (0) | 2022.09.05 |
|---|---|
| [bootBoard] N:1(다대일) 연관관계: 4. @ManyToOne 어노테이션 추가 (1) | 2022.07.26 |
| [bootBoard] N:1(다대일) 연관관계: 2. 프로젝트 생성 (0) | 2022.07.25 |
| [bootBoard] N:1(다대일) 연관관계: 1.연관관계와 DB 설계 (0) | 2022.07.25 |
| guestbook: 11. 검색처리(3) (0) | 2022.07.24 |
Comments