목록BE/JPA (112)
오봉이와 함께하는 개발 블로그
단방향 연관관계 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다.(회원 = N, 팀 = 1) 객체를 테이블에 맞춰 모델링(연관관계가 없는 객체) 위 사진을 코드로 구현한 엔티티는 아래와 같다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; } //............................... @Entity public class Team { @Id @GeneratedValue..
요구사항 분석과 기본 매핑 회원은 상품을 주문할 수 있으며, 주문 시 여러 종류의 상품을 선택할 수 있다. 기능 목록 회원 회원 가입 회원 조회 상품 상품 등록 상품 수정 상품 조회 주문 상품 주문 주문 내역 조회 주문 취소 도메인 모델 분석 회원과 주문의 관계 : 회원은 여러 번 주문할 수 있다. 주문과 상품의 관계 : 주문할 때 여러 상품을 선택할 수 있다. 반대로 같은 상품도 여러 번 주문될 수있으며, 주문상품이라는 모델을 만들어서 다대가 관계를 일다대, 다대일 관계로 풀어냄 테이블 설계 엔티티 설계와 매핑 코드 Member @Entity @Getter @Setter public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) ..
필드와 컬럼 매핑 아래와 같은 가정을 해보자 회원은 일반 회원과 관리자로 구분해야 한다. 회원 가입일과 수정일이 있어야 한다. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다. @Entity @Getter @Setter public class Member { @Id private Long id; @Column(name = "name") private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIMESTAMP) private Date createdDate; @Temporal(TemporalType.TIMESTAMP)..
객체와 테이블 매핑 JPA에서 객체와 테이블을 매핑해야 한다. 총 4개의 매핑을 해야 하는데 아래와 같이 나뉜다. 엔티티 매핑 객체와 테이블 매핑 @Entity @Table 필드와 컬럼 매핑 @Column 기본 키 매핑 @Id 연관관계 매핑 @ManyToOne @JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리하고 엔티티라 한다. 그래서 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션이 필수로 붙어야 한다. 주의사항 파라미터가 없는 public 혹은 protected 생성자는 꼭 있어야 한다. 이는 JPA가 다양한 기술을 사용하기 때문이다. 또, final 클래스나 enum, interface, inner 클래스는 사용할 수 없다. 마지막으로 DB에 저장할..
풀러시 플러시란 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것이다. 플러시가 발생하면 자동으로 변경 감지하고 수정된 엔티티 쓰기 지연 SQL 저장소에 등록하며, 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송한다. 플러시를 한다고 해서 1차 캐시가 삭제되지는 않는다, 단지 플러시는 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송하는 역할을 한다. 영속성 컨텍스트를 플러시 하는 방법 em.flush() 직접 호출 트랜잭션 커밋 플러시 자동 호출 JPQL 쿼리 실행 플러시 자동 호출 JPQL 실행시 자동으로 플러시가 호출되는 이유는 앞서 persist한 객체가 있고, 해당 객체를 JPQL로 조회할 경우를 대비하는 것이다. 해당 객체를 영속성 컨텍스트에 등록은 했지만 DB에 값이 들어간 상태는 아니기 때문에 ..