dev_공부일지/JPA 에러 정리
자식과 부모의 Foreign키 컬럼명이 다를 경우
dev_0hoon
2024. 2. 28. 19:37
Work
file
file테이블의 parentes_no는 work 테이블의 work_no를 외래키로 삼아 끌어온다. 처음부터 구축할 경우에는 이렇게 진행하지 않겠지만, 옛날 방식으로 몇번 보였던 방식이다. 이럴 경우 엔티티 입장에서 OneToMany로 긁어 오는 방법이다.
work
package com.loopcreative.web.entity;
import jakarta.persistence.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name="tbl_work")
public class Work {
@Id @GeneratedValue
@Column(name="work_no")
private Long id;
@OneToMany(mappedBy = "work")
private List<Files> files = new ArrayList();
private String workTitle;
private String workType;
private String useYn;
private LocalDateTime regDt;
private LocalDateTime udpDt;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getWorkTitle() {
return workTitle;
}
public void setWorkTitle(String workTitle) {
this.workTitle = workTitle;
}
public String getWorkType() {
return workType;
}
public void setWorkType(String workType) {
this.workType = workType;
}
public String getUseYn() {
return useYn;
}
public void setUseYn(String useYn) {
this.useYn = useYn;
}
public LocalDateTime getRegDt() {
return regDt;
}
public void setRegDt(LocalDateTime regDt) {
this.regDt = regDt;
}
public LocalDateTime getUdpDt() {
return udpDt;
}
public void setUdpDt(LocalDateTime udpDt) {
this.udpDt = udpDt;
}
public List<Files> getFiles() {
return files;
}
public void setFiles(List<Files> files) {
this.files = files;
}
}
Files
package com.loopcreative.web.entity;
import jakarta.persistence.*;
@Entity
@Table(name="tbl_file")
public class Files {
@Id @GeneratedValue
@Column(name="file_no")
private Long Id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="parents_no")
private Work work;
private Integer ord;
private String filePath;
private String orgName;
private String exName;
private String saveName;
private String cd;
public Long getId() {
return Id;
}
public void setId(Long id) {
Id = id;
}
public Integer getOrd() {
return ord;
}
public void setOrd(Integer ord) {
this.ord = ord;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
this.orgName = orgName;
}
public String getExName() {
return exName;
}
public void setExName(String exName) {
this.exName = exName;
}
public String getSaveName() {
return saveName;
}
public void setSaveName(String saveName) {
this.saveName = saveName;
}
public String getCd() {
return cd;
}
public void setCd(String cd) {
this.cd = cd;
}
public Work getWork() {
return work;
}
public void setWork(Work work) {
this.work = work;
}
@Override
public String toString() {
return "Files{" +
"Id=" + Id +
", ord=" + ord +
", filePath='" + filePath + '\'' +
", orgName='" + orgName + '\'' +
", exName='" + exName + '\'' +
", saveName='" + saveName + '\'' +
", cd='" + cd + '\'' +
'}';
}
}
work 엔티티에서는 똑같이
@OneToMany(mappedBy = "work")
private List<Files> files = new ArrayList();
로 작성해준다.
file
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="parents_no")
private Work work;
file 엔티티에서 Work엔티티의 JoinColumn을 parents_no로 잡아주면 쿼리를 날릴 때에 parents_no = work_no 로 적용된다.