• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JPA JoinColumn에서 지정한 FK에 자동으로 값 넣기

21.04.19 17:35 작성 조회수 661

0

안녕하세요.

강의 도중 궁금한점이 있어 질문 드립니다.

School Entity와 Student Entity를 Join 관계로 지정하였습니다.

[School Entity]

@Table(name = "school")

public class SchoolVo {

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "id", nullable = false)

    private Integer id;

    @Column(name = "school_name", nullable = false)

    private String schoolName;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="schoolVoList")

    private List<Student> student = new ArrayList<>();

}

[Student Entity]

@Table(name = "student")

public class StudentVo {

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "id", nullable = false)

    private Integer id;

    @Column(name = "school_id", nullable = false)

    private int schoolId;

    @Column(name = "student_name", nullable = false)

    private String studentName;

    @ManyToOne

    @JoinColumn(name = "school_id_fk")

    private SchoolVo schoolVoList;

}

repository.save를 이용하여 student 테이블에 값을 추가하려고 합니다.

이때 FK인 "school_id_fk"에만 값이 들어가지 않는데요. FK에 접근하려면 어떻게 하면 될까요?

FK키에 자동으로 schoolId 값이 들어가도록 하고 싶습니다.

Student 테이블에 값을 저장한 소스는 아래와 같습니다.

    @PostMapping("/local")

    public StudentVo setStudentInfo(@RequestBody StudentVo newStudent) {

        return studentRepository.save(newStudent);

    }

그리고 다른 이야기이지만..

Student Table에 school_id 컬럼이 있음에도 불구하고 FK를 별도로 지정해 주는 방법은 효율적인 건가요?

2컬럼이 계속 같은 값이 들어갈텐데 인터넷 검색해보니 가시성도 높아지고 별도로 해주는게 좋다고도 하던데

굳이 같은 값이 들어가는 컬럼을 중복해서 만들 필요가 있는지,

FK없이 JPA에서 테이블간의 조인도 가능한지 궁금합니다!

질문이 쫌 많아졌지만... 조언 부탁 드립니다^^

감사합니다.

답변 1

답변을 작성해보세요.

0

안녕하세요. 원론적으로라면 school_id 컬럼이 불필요한 컬럼이죠. 어차피 School 타입의 필트가 FK에 맵핑되는 컬럼이 될 수 있으니까요. 인터넷으로 검색했던 그 글에서 말하는 "가시성"이라는게 어떤건지 잘 모르겠네요.

FK없이 JPA에서 테이블간의 조인이 가능하냐는 질문은 School 없이 schoo_id 컬럼 가지고 JPA로 조인이 가능하냐는 질문이시죠? 아니요. JPA 입장에선 연관 관계를 맵핑한게 아니라 일반 컬럼 값이라서 School 테이블로 조인하는 쿼리를 만들기는 어렵습니다. 다만, JPA를 쓰지 마시고 SQL로 쿼리를 만든다면 가능하겠네요. 어차피 그 안에 들어있는 FK 값만 필요한 거니까요.