java 배우기/TIL

Spring 익숙해지기 개인과제2

checkuu 2024. 8. 30. 15:22

Entity의 User ,Todo, Reply, Manager 연관관계 생성하기

 

Todo와 Reply는 1:N 연관

User와 Todo는 N:M 관계 , 중간에 Manager Entity생성하여 각각 연결해주기

 

User

@Entity
@Getter
@NoArgsConstructor
public class User extends Timestamped {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String userName;
    @Column(unique = true)
    private String email;


    public User(String userName, String email) {
        this.userName = userName;
        this.email = email;
    }
}

 

Todo

@Entity
@Getter
@NoArgsConstructor
public class Todo extends Timestamped {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String contents;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id",nullable = false)
    private User user;

    @OneToMany(mappedBy = "todo",cascade = CascadeType.REMOVE)
    private List<Reply> replys = new ArrayList<>();

    public Todo(User user , String title, String contents){
        this.user = user;
        this.title = title;
        this.contents = contents;
    }

    public void updateTitle(String title){
        this.title = title;
    }

    public void updateContents(String contents){
        this.contents = contents;
    }

}

 

Reply

@Entity
@Getter
@NoArgsConstructor
public class Reply extends Timestamped { //todo와 1 대 N 관계

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "reply_id")
    private Long id;
    private String contents;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "User_id",nullable = false)
    private User user;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "Todo_id",nullable = false)
    private Todo todo;

    public Reply(User user, String contents,Todo todo){
       this.user = user;
       this.contents =contents;
       this.todo = todo;
    }

    public void updateReply(String contents) {
        this.contents = contents;
    }

}

 

Manager

@Entity
@Getter
@NoArgsConstructor
public class Manager{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id",nullable = false) //일정 만든사람 id
    private User user;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "todo_id",nullable = false) //일정 id
    private Todo todo;

    public Manager(User user, Todo todo) {
        this.user = user;
        this.todo = todo;
    }
}