본문 바로가기

전체 글131

[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.
[JPA] 영속성 컨텍스트 영속성 컨텍스트JPA에서 가장 중요한 2가지객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping)영속성 컨텍스트 엔티티 매니저 팩토리 & 엔티티 매니저엔티티 매니저 팩토리를 통해서 고객의 요청이 올 때마다 엔티티 매니저를 생성한다.엔티티 매니저는 DB Connection을 사용해서 DB를 사용하게 된다. 영속성 컨텍스트JPA를 이해하는데 가장 중요한 용어“엔티티를 영구 저장하는 환경”이라는 뜻EntityManager.persist(entity);persist() : DB에 저장하는 것이 아니라 영속성 컨텍스트를 통해서 엔티티를 영속화하는 것. 엔티티 매니저? 영속성 컨텍스트?영속성 컨텍스트는 눈에 보이지 않는 추상적이고 논리적인 개념이다.엔티티 매니저를 통해 영속성 컨텍스트에.. 2023. 4. 11.
[JPA] 애플리케이션 개발 JPA JPA의 구동 방식 Persistence 클래스에서 META-INF/persistence.xml을 조회한다. 이때, META-INF/persistence.xml의 persistence-unit name과 EntityManagerFactory의 persistenceUnitName를 동일하게 매핑시켜야 한다. EntityManagerFactory를 생성한다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManagerFactory에서 필요할 때마다 EntityManager를 생성한다. EntityManager em = emf.createEntityManager(); 엔티티 생성 @Entity @Gett.. 2023. 4. 11.
[Spring Boot + JPA] 웹 어플리케이션 개발 - 4. 웹 계층 개발 웹 계층 개발 웹 계층 개발 1. 홈화면과 레이아웃 2. 회원 등록 3. 회원 목록 조회 4. 상품 등록 5. 상품 목록 6. 상품 수정 7. 변경 감지와 병합(merge) 8. 상품 주문 9. 주문 목록 검색, 취소 📌 홈 화면과 레이아웃 홈 컨트롤러 등록 @Controller @Slf4j public class HomeController { @RequestMapping("/") public String home() { log.info("home controller"); return "home"; } } 📌 회원 등록 폼 객체를 사용해서 화면 계층과 서비스 계층을 명확하게 분리한다. 회원등록 폼 객체 @Getter @Setter public class MemberForm { @NotEmpty(messa.. 2023. 4. 7.