본문 바로가기

JPA22

[JPA] 다양한 연관관계 매핑 - 다대일, 일대다 연관관계 매핑 시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 연관 관계는 대칭성을 갖는다. 다대일 ↔ 일대다 일대일 ↔ 일대일 다대다 ↔ 다대다 다중성 어노테이션 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 테이블은 외래 키 하나로 양쪽을 조인할 수 있다. 그렇기 때문에 사실 방향이라는 개념이 없다. 객체 객체는 참조용 필드가 있는 쪽으로만 참조가 가능하다. 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향이라 한다. 사실 객체에는 양방향이 없고 양쪽이 각각 단방향으로 서로를 바라보는 것이다. 이것을 우리는 양방향이라고 부른다. 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연.. 2023. 4. 14.
[JPA] 연관관계 기초 연관관계가 필요한 이유 연관관계가 필요한 이유를 말하기 앞서 간단한 예제 시나리오를 만들어보겠다. 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. 객체를 테이블에 맞추어 모델링(연관관계가 없는 객체) (참조 대신에 외래키를 그대로 사용한다.) Member.java @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String username; @Column(name = "TEAM_ID") private Long teamId; } Team.java @Entity @Getter @Setter pu.. 2023. 4. 12.
[JPA] 엔티티 매핑 엔티티 매핑 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리. 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수로 붙여야 한다. @Entity 사용 시 주의점 기본 생성자 필수이므로 임의 생성자 생성 시 기본 생성자를 설정해줘야 한다. (파라미터가 없는 public 또는 protected 생성자) final 클래스, eumn, interface, inner 클래스에는 사용할 수 없다. DB에 저장할 필드에 final을 사용할 수 없다. @Entity 속성 name JP.. 2023. 4. 12.
[JPA] 플러시와 준영속 상태 플러시(flush) 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것. 플러시 발생 변경 감지가 발생하면 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록한다. 트랜잭션 커밋시점에 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다.(INSERT, UPDATE, DELETE) 영속성 컨텍스트를 플러시 하는 방법 em.flush() : 직접 호출 트랜잭션 커밋 : 플러시 자동 호출 JPQL 쿼리 실행 : 플러시 자동 호출 em.flush() 미리 DB에 저장하고 싶거나 미리 SQL을 보고 싶을 경우 em.flush()를 호출한다. 호출 즉시 플러시가 발생한다. public class Flush { public static void main(String args[]) { EntityManagerFa.. 2023. 4. 11.