객체를 관계형 데이터베이스에 저장
Album Table에 객체 저장
Insert Into Album...
Insert Into Item ...
Item, Album Table 각각 Insert 로직을 실행해야한다(뭔가 번거롭다... 🤔)
조회
각각 테이블 Join 후 Select
각각 객체 생성
각각 ...
각..
관계형 데이터베이스가 아니라 자바 컬렉션에 저장하고 조회한다면??
list.add(album); // 저장 Album album = list.get(albumId); Item item = list.get(albumId); // 부모 타입으로 조회 후 다형성 활용
class Member {
String id; // MEMBER_ID 컬럼 사용
Long teamId; // Team_id KF 컬럼사용
String username; // USERNAME 컬럼 사용
}
class Team {
Long TEAM_ID; // TEAM_ID PK 컬럼 사용
String name; // NAME 컬럼 사용
}
위처럼 모델링한 객체로 MEMBER TABLE에 Insert 쿼리문
INSERT INTO MEMBER(MEMBER_ID, TEAM_ID, USERNAME) VALUES...
TEAM_ID는 외래키는 참조 객체인거 같고 전혀 객체지향적이지 않아 보인다
아래 처럼 조금 더 객체 지향적으로 모델링이 가능하다.
class Member {
String id; // MEMBER_ID 컬럼 사용
Team team;
String username; // USERNAME 컬럼 사용
Team getTeam() {
return team;
}
}
class Team {
Long TEAM_ID; // TEAM_ID PK 컬럼 사용
String name; // NAME 컬럼 사용
}
위처럼 모델링 하면
INSERT INTO MEMBER(MEMBER_ID, TEAM_ID, USERNAME) VALUES...
TEAM_ID ➡️ member.getTeam().getId()로 구할 수 있다.
다소 복잡하지만 객체 지향적인거 같다.
하지만 조회시에는?
SELECT M.*
T.*
FROM MEMBER M
,TEAM T
JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID
해당 쿼리 결과를 객체에 넣기 위해서는
SQL문 실행 ➡️ MEMBER 객체 생성 ➡️ MEMBER 객체에 데이터 입력 ➡️ TEAM 객체 생성 ➡️ TEAM 객체에 데이터 입력 ➡️ MEMBER 객체와 TEAM객체 관계 설정
자바 컬렉션에서 관리는 쉽지만 데이터베이스에 넣고 빼는 순간 복잡해진다.
결국 MemeberWithTeam 객체 처럼 Super 객체럴 만들어 다 때려 넣는다.
class MemberService {
public void precess() {
Member member = memeberDAO.FIND(memberID);
member.getTeam(); // null ??
member.getOrder().getDelivery(); // null ??
}
}
memberDAO.FIND 함수를 재사용할때
member.getTeam()
member.getOrder().getDelivery()
해당 객체 참조시 신뢰할수가 없다 ➡️ 엔터티 신뢰 문제
객체를 자바 컬렉션에 저장하듯이 데이터베이스에 저장할수없을까? JPA