JPA JoinColumn에서 지정한 FK에 자동으로 값 넣기
918
작성한 질문수 3
안녕하세요.
강의 도중 궁금한점이 있어 질문 드립니다.
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 값만 필요한 거니까요.
spring boot 2.7.13-SNAPSHOT trace 소문자 로그 안나옴
0
537
1
<스프링 데이터 Common: 기본 리포지토리 커스터마이징> 에 대한 질문
0
398
1
comment table에서 저장될떄 왜 id값이 2부터저장이되는건가요?
0
411
1
@EnableJpaRepositories 설정을 스프링부트가 어디에서 자동설정하나요?
0
453
0
PersistenceContext 관련 질문드립니다.
0
341
1
지금(Eager), 나중에(Lazy)의 의미를 모르겠습니다
0
340
1
transaction 구간이 길어질 경우의 처리방법 문의드립니다.
0
916
1
docker postgres
0
295
1
Multiple DataSource 사용 시 transaction 관련 질문 드립니다.
0
2913
1
entity 중 null이 아닌 필드만 update 할 방법이 있을까요?
0
1197
1
Eager 모드일 경우, join을 inner join으로 바꾸는 법이 있을까요?
0
387
1
엔티티를 상속받는 DTO가 일반적인가요?
1
1855
1
커스텀 타입 클래스를 String 타입 처럼 이용해 쿼리하는 방법에 대해 질문하고 싶습니다.
0
345
1
연관관계 매핑 어떤식으로 해야될지 감이 안잡힙니다.
0
570
4
EntityManager 주입시 Annotation관련 질문드립니다.
0
568
1
클래스 기반 프로젝션 사용 관련 질문
0
565
1
save 메서드 질문드립니다.
0
262
1
복잡한 통계쿼리도 JPA로 가능한가요?
2
5604
1
find 와 get의 차이가 무엇인가요?
0
899
1
실무에서 JPA 할 때 FK로 개발할때 연관관계를 꼭 맺어주어야 하나요?
0
1004
1
\dt Did not find any relations.
0
485
1
소스코드는 어디서 볼 수 있을까요?
1
292
1
table 생성과 select 문에 대한 질문
0
177
1
스프링 데이터 RepositoryTest 관련 질문
0
2174
2





