Reference. 자바 ORM 표준 JPA 프로그래밍
책 목차 및 이전 글
더보기
들어가기 전 JPA 특징, Q&A
1. JPA 소개
3. 영속성 관리
4. 엔티티 매핑
4.1 - 4.3 @Entity, @Table, 다양한 매핑
4.4 - 4.5 데이터베이스 스키마 자동 생성, DDL 생성 기능
5. 연관관계 매핑 기초
5.2.1 저장
회원과 팀을 저장하는 JPA 코드
//팀1 저장
Team team1 = new Team("team1", "팀1");
em.persist(team1);
//회원1 저장
Member member1 = new Member("member1", "회원1");
member1.setTeam(team1); //연관관계 설정 member1 -> team1
em.persist(member1);
JPA에서 실행된 SQL
INSERT INTO TEAM(TEAM_ID, NAME) VALUES('team1', '팀1');
INSERT INTO MEMBER(MEMBER_ID, TEAM_ID, USERNAME)
VALUES('member1', 'team1', '회원1');
<주의>
- JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 함
em.persist(team1)
을 통해 영속화 후member1.setTeam(team1)
로 연관관계 설정
5.2.2 조회
- 엔티티를 조회하는 대표적인 2가지 방법
- 객체 그래프 탐색 (객체 연관관계를 사용한 조회)
- 객체지향 쿼리 사용 (
JPQL
)
- 객체 그래프 탐색
member.getTeam()
을 사용해 member와 연관된 team엔티티를 조회
Member member = em.find(Member.class, "member1"); Team team = member.getTeam(); //객체 그래프 탐색
- 객체지향 쿼리 사용
- JPQL도 조인을 지원(데이터베이스의 문법과는 약간 다름)
String jpql = "select m from Member m join m.team t where t.name=:teamName"; List<Member> resultList = em.createQuery(jpql, Member.class) .setParameter("teamName", "팀1"); .getResultList();
from Member m join m.team t
문법을 통해 Member와 Team을 조인
where 절에 t.name
으로 검색조건 사용:teamName
과 같이 :로 시작하는 것은 파라미터 바인딩 문법을 의미
--JPQL select m from Member m join m.team t where t.name=:teamName --SQL SELECT M.* FROM MEMBER MEMBER INNER JOIN TEAM TEAM1_ ON MEMBER.TEAM_ID = TEAM1_.ID WHERE TEAM1_.NAME='팀1'
5.2.3 수정
em.update()
같은 메소드는 존재X
- 변경 감지 기능을 통해 트랜잭션 커밋시 자동 플러시로 update 기능 수행
- 연관관계를 수정할 때도 동작, 참조하는 대상만 변경하면 JPA가 자동처리
JPA 수정 코드
//새로운 팀2
Team team2 = new Team("team2", "팀2");
em.persist(team2);
//회원1에 새로운 팀2 설정
Member member = em.find(Member.class, "member1");
member.setTeam(team2);
JPA에서 실행된 SQL
UPDATE MEMBER
SET
TEAM_ID='team2', ...
WHERE
ID='member1'
5.2.4 연관관계 제거
JPA 연관관계 제거 코드
Member member1 = em.find(Member.class, "member1");
member1.setTeam(null);
JPA에서 실행된 SQL
UPDATE MEMBER
SET
TEAM_ID=null, ...
WHERE
ID='member1'
5.2.5 연관된 엔티티 삭제
- 연관된 엔티티를 삭제하려면 연관관계를 먼저 제거 후 삭제처리
- 외래 키 제약 조건으로 인해 오류 발생
member1.setTeam(null); //회원1 연관관계 제거
member2.setTeam(null); //회원2 연관관계 제거
em.remove(team); //팀 삭제
'개발서적 > 자바 ORM 표준 JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 6.1 다대일 (0) | 2021.08.18 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 5.3 양방향 연관관계 (0) | 2021.08.12 |
[자바 ORM 표준 JPA 프로그래밍] 5.1 단방향 연관관계 (0) | 2021.08.12 |
[자바 ORM 표준 JPA 프로그래밍] 4.7 필드와 컬럼 매핑: 레퍼런스 (0) | 2021.08.03 |
[자바 ORM 표준 JPA 프로그래밍] 4.6 기본 키 매핑 (0) | 2021.08.03 |