JPA는 데이터베이스를 객체화하였기 때문에 Entity를 설계할 때에 연관관계 메서드를 넣어주어야 합니다. 연관관계 메서드는 연관관계를 가진 Entity를 생성할 때 사용하는 함수로 연관관계에서 주인이 되는 곳에 선언되게 됩니다. 테이블 설계는 https://hangjastar.tistory.com/223을 기준으로 진행하겠습니다.
연관관계의 주인은 일대다, 다대일의 경우에는 다쪽에 일대일은 경우에 따라 다르지만 더 호출이 많은 곳을 주인으로 설정하면 됩니다. 테이블 설계에서는 관계는 다음과 같습니다.
테이블 관계( <-> :양방향, -> : 단방향) | 주인 |
member <-> pet | pet |
chart -> pet | chart |
chart -> vet | chart |
prescription <-> chart | prescription |
vet <-> department | vet |
prescription -> vet | prescription |
테이블 관계에서 단방향의 경우에는 연관관계 메서드를 선언하지 않아도 됩니다. 따라서 양방향 관계를 가지고 있는 member <-> pet, vet <-> department, prescription <-> chart에 함수를 선언해주면 됩니다. 먼저 member <-> pet입니다.
...
//== 연관관계 메서드 ==//
public void setMember(Member member) {
if (this.member != null) {
this.member.getPets().remove(this);
}
this.member = member;
member.getPets().add(this);
}
...
이전에 설정한 member가 있었다면 해당 member의 pets에서 자기 자신을 제거해줍니다. 제거가 완료되었다면 새로운 member를 설정하고, 해당 member의 pets에 자기자신을 넣어줍니다. 이전에 설정한 member가 없다면 member를 설정하고, 해당 member의 pets에 자기자신을 넣어줍니다.
다음은 vet <-> department에서 vet의 추가 코드입니다. 기능은 위와 같습니다.
...
//== 연관관계 메서드 ==//
public void setDepartment(Department department) {
if (this.department != null) {
this.department.getVets().remove(this);
}
this.department = department;
department.getVets().add(this);
}
...
다음은 prescription <-> chart의 prescription의 추가 코드입니다. 기능은 위와 같습니다.
...
//== 연관관계 메서드 ==//
private void setChart(Chart chart) {
if (this.chart != null) {
this.chart.getPrescriptions().remove(this);
}
this.chart = chart;
chart.getPrescriptions().add(this);
}
...
데이터베이스는 하나의 외래 키로 서로가 서로를 참조할 수 있기 때문에 위와 같은 과정을 필요로 하지 않지만 JPA는 데이터베이스를 객체화하였기 때문에 한 번의 설정으로 서로를 참조하게 할 수 없습니다. 따라서 연관관계의 주인이라는 개념과 연관관계 메서드를 통해 서로가 서로를 참조할 수 있는 구조로 구성이 되게 되었습니다.
'Java, JavaScript > Spring Boot' 카테고리의 다른 글
[Spring Boot] POST 요청을 사용하여 Entity 생성하기 (0) | 2021.09.10 |
---|---|
[Spring Boot] @RequestParam, @PathVariable 차이는 뭐야? (0) | 2021.09.09 |
[Spring Boot] 동물병원 진료 데이터베이스 설계 (0) | 2021.08.31 |
[Spring Boot] @Autowired를 사용하지 않고 Bean 가져오기 (0) | 2021.08.27 |
[Spring Boot] IntelliJ Live Templates 생성하는 방법 (0) | 2021.08.26 |