전체 글 55

영속성 전이: CASCADE

특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶으면 영속성 전이 기능을 사용하면 된다. JPA는 CASCADE 옵션으로 영속성 전이를 제공한다. // 부모 엔티티 @Entity public class Parent { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "parent") private List children = new ArrayList(); ... } //자식 엔티티 @Entity public class Child { @Id @GeneratedValue private Long id; @ManyToOne private Parent parent; ... } 부모 엔티티가 여러가지 자식 엔티티를 가지고 있다...

JPA 2023.07.31

즉시 로딩과 지연 로딩

즉시 로딩 즉시 로딩(Eager Loading)을 사용하려면 @ManyToOne의 fetch 속성을 FetchType.EAGER로 지정한다. // 즉시 로딩 설정 @Entity public class Member { ... @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "TEAM_ID") private Team team; ... } 위의 코드에서 회원과 팀을 즉시 로딩으로 설정했다. // 즉시 로딩 실행 코드 Member member = em.find(Member.class, "member1"); Team team = member.getTeam(); //객체 그래프 탐색 따라서 em.find(Member.class, "member1")로 회원을 조회하는..

JPA 2023.07.31

프록시

객체는 객체 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 데이터베이스에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA 구현체들은 이 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 하지만 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회하는것이 효과적이다. JPA는 즉시 로딩과 지연 로딩이라는 방법으로 둘을 모두 지원한다. 프록시 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. 예를 들어 회원 엔티티를 조회할 때 연관된 팀 엔티티는 비즈니스 로직에 따라 사용될 때도 있지만 그렇지 않을 때도 있다. //회원 엔티티 @Entit..

JPA 2023.07.28

@SecondaryTable : 엔티티 하나에 여러 테이블 매핑

@SecondaryTable을 사용하면 한 엔티티에 여러 테이블을 매핑할 수 있다. @Entity @Table(name = "BOARD") @SecondaryTable(name = "BOARD_DETAIL", pkJoinColumns = @PrimaryKeyJoinColumn(name = "BOARD_DETAIL_ID")) public class Board { @Id @GeneratedValue @Column(name = "BOARD_ID") private Long id; private String title; @Column(table = "BOARD_DETAIL") private String content; ... } Board 엔티티는 @Table을 사용해서 BOARD 테이블과 매핑했다. 그리고 @S..

JPA 2023.06.13

조인 테이블

데이터베이스 테이블의 연관관계를 설계하는 방법은 크게 2가지다. 1. 조인 컬럼 사용(외래 키) 2. 조인 테이블 사용(테이블 사용) ▼ 조인 컬럼 사용 테이블 간에 관계는 주로 조인 컬럼이라 부르는 외래 키 컬럼을 사용해서 관리한다. 외래키에 null을 허용하는 관계를 선택적 비식별관계라한다. 회원과 사물함을 조인할 때 외부조인(OUTER JOIN)을 사용해야한다. 실수로 내부 조인을 사용하면 사물함과 관계가 없는 회원은 조회되지 않는다. 그리고 회원과 사물함이 아주 가끔 관계를 맺는다면 외래 키 값 대부분이 null로 저장되는 단점이 있다. ▼ 조인 테이블 사용 조인 테이블이라는 별도의 테이블을 사용해서 연관관계를 관리한다. 조인 컬럼을 사용하는 방법은 단순히 외래키 컬럼만 추가해서 연관관계를 맺지만..

JPA 2023.06.13