동일 엔티티 참조

Junyoung·2024년 2월 19일

trouble

목록 보기
2/8

동일 엔티티를 하나의 엔티티에서 참조할때 발생했던 문제점을 기록하려고 합니다.

package com.ssafy.soyu.chat.entity;

import com.ssafy.soyu.item.entity.Item;
import com.ssafy.soyu.member.entity.Member;
import com.ssafy.soyu.message.entity.Message;
import jakarta.persistence.*;
import java.util.List;
import lombok.AccessLevel;
import lombok.Getter;

import java.time.LocalDateTime;
import lombok.NoArgsConstructor;
import lombok.ToString;


@Entity
@Table(name = "chat")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString(exclude = {"item", "buyer", "seller"})
public class Chat {
    @Id
    @GeneratedValue
    @Column(name = "chat_id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "item_id")
    private Item item;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private Member member;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private Member member;

    @OneToMany(mappedBy = "chat")
    List<Message> message;

    private String lastMessage;

    private LocalDateTime lastDate;

    private Boolean isChecked;
    private LocalDateTime lastChecked;

    public Chat(Item item, Member seller, Member buyer) {
        this.item = item;
        this.seller = seller;
        this.buyer = buyer;
    }

    public void changeLast(String lastMessage) {
        this.lastMessage = lastMessage;
        this.lastDate = LocalDateTime.now();
    }
}

위 코드와 erd 사진에서 Chat 엔티티에서 Member의 엔티티를 buyer 와 seller 로 나누어서 구현하였다.

chat 엔티티에서 위 코드와 같이 Member 엔티티의 참조와 DB 이름을 같게하니 에러가 발생했다

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "buyer_id")
private Member buyer;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "seller_id")
private Member seller;

위와 같이 DB의 컬럼명과 객체의 이름은 변경하니 에러없이 사용이 가능했다

profile
라곰

0개의 댓글