작성
·
169
0
선생님.
제갸 계속 개념을 못 잡고 있습니다.
예제를 따라 했습니다.
Member와 Team Class를 만들었고, 양방향 매핑을 햇습니다.
<Member.java>
<Team.java>
Member에서 Join으로 'Team_ID' 를 잡았지만, 예제를 따라 하면서 Team.java의 id 필드의 name을 'TEAM_ID' 로 변경 하지 않았습니다.
제 생각에 위에 화살표 부분을 아래와 같이 바꾸어야 할거 같은데요.
@Id @GeneratedValue
@Column(name="TEAM_ID")
private Long id;
실제 id 필드의 이름을 @Column annotaiton 주지 않고 바로 실행하면, 아래와같이 table 이 생깁니다.
<H2 화면>
Intellij Console에 보면 Member table 생성하면서 TEAM_ID가 ForignKey 가 되는 것처럼 나옵니다.
실제 data 를 넣으면 아래와 같이 data 가 들어 갑니다.
Forign key 로 TEAM_ID 를 잡았으면, TEAM TABLE에 ID가 TEAM_ID로 변경 되어야 하는것 아닌가요?
위의 상태로 변경 안하고 그대로 사용 해도 Forign key 컬럼인 TEAM_ID 와 물린 것이 TEAM TABLE의 ID 라고
인식 하고 정상 작동 하는 가요?
즉 JPQL 로 쿼리 짤때 두 TABLE의 JOIN을 하려고 하면 TEAM_ID 와 ID 가 매칭이 되는 건가요?
답변 3
1
조금 더 보충설명을 드릴께요^^
Forign key 로 TEAM_ID 를 잡았으면, TEAM TABLE에 ID가 TEAM_ID로 변경 되어야 하는것 아닌가요?
-> 아닙니다. @Column, @JoinColumn은 일부 예외가 있기는 하지만 자기 테이블의 컬럼명에만 영향을 줍니다. 따라서 MEMBER TABLE에 있는 FK명에만 영향을 줍니다. TEAM 테이블의 컬럼명에는 영향을 주지 않습니다.
위의 상태로 변경 안하고 그대로 사용 해도 Forign key 컬럼인 TEAM_ID 와 물린 것이 TEAM TABLE의 ID 라고 인식 하고 정상 작동 하는 가요?
-> 네 정상 작동 합니다^^
즉 JPQL 로 쿼리 짤때 두 TABLE의 JOIN을 하려고 하면 TEAM_ID 와 ID 가 매칭이 되는 건가요?
-> 네 맞습니다^^
1
안녕하세요. 세희님^^
우선 질문을 하실 때 예제를 최대한 많이 사용해서 많은 정보를 주셔서 감사합니다. 좋은 질문의 정석이네요 ㅎㅎ
답변을 드리면, 작성하신 코드도 맞고, 정상 동작한 것이 맞습니다.
우선 PK와 FK 컬럼 이름이 똑같지 않아도 됩니다^^!
위 상태로 변경을 안하고 그대로 사용해도 정상 인식하고 잘 동작합니다.
JPQL로 쿼리를 짤 때도 TEAM_ID와 ID가 매칭이 됩니다!
(이정도는 매칭해주어야 ORM이라고 할 수 있겠지요?)
도움이 되셨길 바래요^^
0