Wanna be Brilliant Full-Stack Developer
SprignBoot 구독 API 모델 만들기 본문
목표
모델 만들기!
package com.cos.photogramstart.domain.subscribe;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import com.cos.photogramstart.domain.user.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
public class Subscribe {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 번호 증가 전략이 데이터베이스를 따라간다.
private int id;
private User fromUser; //구독하는유저
private User toUser; //구독받는애
}
Susbscribe 중간 테이블을 만들기위해 구독하는 유저와 구독받는 테이블을 생성하고
연관관계를 보는데 User가 1이고 Subscirbe는 N
니까 @ManyToOne 어노테이션을 두개에다 올려놓으면 Subscribe 테이블을 생성해준다
시간이 있어야하니까 시간을 복사해온다 .
그리고 테이블을 만들어진것을 확인해보면
나는 오브젝트를 만들고 그오브젝트를 따라 Entity(@Entity)가 만들어진것이다.
하지만 이름이 마음에 들지 않으면 변경할수도 있는데
package com.cos.photogramstart.domain.subscribe;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PrePersist;
import com.cos.photogramstart.domain.user.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
public class Subscribe {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 번호 증가 전략이 데이터베이스를 따라간다.
private int id;
@JoinColumn(name="fromUserId")
@ManyToOne
private User fromUser; //구독하는유저
@JoinColumn(name="ToUserId")
@ManyToOne
private User toUser; //구독받는애
private LocalDateTime createDate;
@PrePersist
public void createDate() {
this.createDate = LocalDateTime.now();
}
}
이렇게 만드니 DB에서는 예전것도 그대로 살아 있는것을 확인할수 있었는데..?
application.yml에서 create로 다시 데이터를 꺠끗이 만들고 DB에서 새로운 테이블을 확인한뒤 update로 바꾸면된다.
그러면 잘만들어졌으니 여기에대한 Repository를 만들어야한다 .
package com.cos.photogramstart.domain.subscribe;
import org.springframework.data.jpa.repository.JpaRepository;
public interface SusbcribeRepository extends JpaRepository<Subscribe, Integer> {
}
그리고 하나가 더필요한데 1번유저가 2번 유저를 팔로우 했으면 그다음에 데이터가 들어올떄 1번유저가 2번유저를 팔로우하는것을 또 인서트하면 두개가 중복이 되기 떄문에 하나만 유니크 하게 만들필요가 있기 떄문에 유니크 제약조건을 걸려고한다.
무슨 말이냐면 1번이 2번이 구독하는것이 또 들어오게되면 쓸대없는 데이터가 또 들어와서 충돌이 일어나기떄문이다
이미 1번이 2번을 구독하고 있는데 또 1번이 2번을 구독하면 안되게 떄문에 이 관계가 유니크해야한다
그것을 어떻게 정의하냐면
@Table(
uniqueConstraints = {
@UniqueConstraint(
name="subscribe_uk", 유니크 제약조건 이름
columnNames = {"fromUserId", "toUserId"} // 실제 데이터베이스 테이블 컬럼명을 작성해야한다.
)
}
)
'Back-End > Spring Boot' 카테고리의 다른 글
2/14 SpringBoot Image DB에 업로드하기 (0) | 2022.02.14 |
---|---|
SpringBoot 구독, 구독취소 API 만들기 (0) | 2022.02.14 |
SPringBoot 구독하기 API 구현하기 연관관계 개념! (0) | 2022.02.14 |
SpringBoot 회원정보수정 업데이트 완료 (0) | 2022.02.12 |
Springboot 회원정보 수정 Ajax 이용하기 (0) | 2022.02.12 |