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 로 적용된다.