JPA 5

[JPA] 영속성 전이(Cascade)와 고아 객체(orphanRemovel)

1. 영속성 전이(Cascade) 영속성 전이란 연관관계를 가진 엔티티들이 있다고 했을 때 특정 엔티티를 영속시킬 때 관련된 엔티티를 모두 영속시키는 기능을 말한다. 예시를 위해 `Parent` 클래스와 `Child` 클래스를 작성해보겠다. @Entity public class Parent { @Id @GeneratedValue @Column(name = "parent_id") private Long id; private String name; @OneToMany(mappedBy = "parent") private List children = new ArrayList(); public void addChild(Child child) { children.add(child); child.setParent(t..

JPA 2024.01.29

[JPA] 즉시 로딩과 지연 로딩(Feat: Proxy)

`@ManyToOne` 애노테이션을 통해 Member와 Team이 단방향 매핑되어있는 상황을 생각해보자. @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String userName; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } 현재 애플리케이션의 시나리오는 대부분의 경우 Member를 조회했을 때 Member에 대한 정보만 사용하고, Team의 정보를 사용하는 일이 드물다는 상황이다. 이런 경우 Member 엔티티를 조회할 때 마다 DB에서 Team 엔티티..

JPA 2024.01.29

[JPA] Entity 매핑 - 연관관계

1. 객체와 DB의 연관관계 차이 - 예제 시나리오 회원과 팀이 존재 회원은 하나의 팀에만 소속될 수 있다 (N : 1 관계) - DB에 맞춘 엔티티 모델링 위 DB 테이블에 맞춰 엔티티를 모델링해보자. 위와 같이 Member 클래스에 외래 키(FK)인 `teamId`를 갖도록 설계하면 된다. 이런 방식으로 실제 회원과 팀 객체를 생성하고 저장하는 코드를 작성해보겠다. public class Main { ... public static void main(String[] args) { Team team = new Team(); team.setName("TeamA"); em.persist(team); Member memeber = new Member(); member.setName("member1"); me..

JPA 2024.01.28

[JPA] Entity 매핑 - 기본

1. 객체 - DB 테이블 간 매핑 @Entity `@Entity`애노테이션을 붙여야 JPA에서 인식하고 관리한다. 따라서 JPA를 사용해 DB 테이블과 매핑할 클래스에는 `@Entity`를 꼭 붙여줘야한다. 주의사항 기본 생성자는 필수이다. JPA가 내부적으로 리플렉션을 통해 기본 생성자를 호출하기 때문에 넣어줘야한다. final, inner 클래스로 생성할 수 없고, interface나 enum으로도 생성할 수 없다. 저장할 필드에도 final 키워드를 사용할 수 없다. PK로 사용될 필드에 `@Id` 애노테이션을 꼭 붙여야한다. @Entity public class Member { @Id private Long id; private String userName; public Member() { } ..

JPA 2024.01.25

[JPA] 영속성 컨텍스트(Persistence Context)

JPA를 공부할 때 가장 중요한 것 중 하나가 바로 영속성 컨텍스트에 대한 이해이다. 김영한 강사님의 JPA 강의를 통해 영속성 컨텍스트의 이론적인 내용에 대해 확실히 정리하고 넘어가보자. 영속성 컨텍스트란? - 엔티티 매니저 JPA는 기본적으로 *엔티티 매니저*라는 것을 통해 데이터베이스와 통신한다. 엔티티 매니저를 통해 이후에 알아볼 *영속성 컨텍스트*에 접근할 수 있고 데이터를 등록, 수정, 조회, 삭제 할 수 있는 것이다. 엔티티 매니저는 *엔티티 매니저 팩토리*라는 팩토리 클래스를 통해 생성할 수 있다. public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.creat..

JPA 2024.01.23