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

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의 컬럼명과 객체의 이름은 변경하니 에러없이 사용이 가능했다