https://un-lazy-midnight.tistory.com/90 JPA | 필드와 컬럼 매핑, 기본 키 매핑 필드 - 컬럼 매핑 아래와 같은 요구사항이 주어진다고 가정해보자. 1. 회원은 일반회원/관리자로 구분 2. 회원 가입일과 수정일이 존재 3. 회원을 설명하는 필드가 있고 이 필드는 길이 제한이 없 un-lazy-midnight.tistory.com 이번 글에서는 지난 글의 기본 매핑을 실전 예제를 통해 알아본다. 요구사항 분석 회원은 상품을 주문할 수 있음 주문 시 여러 종류의 상품을 선택할 수 있음 도메인 모델 분석 회원-주문 관계: 회원은 여러 번 주문할 수 있음(일대다) 주문-상품 관계: 주문할 때 여러 상품을 선택할 수 있음. 반대로 상품도 여러 번 주문될 수 있음. 주문상품이라는 ..
전체 글
바쁜 새벽(busymidnight)을 살아보고자 만든 블로그필드 - 컬럼 매핑 아래와 같은 요구사항이 주어진다고 가정해보자. 1. 회원은 일반회원/관리자로 구분 2. 회원 가입일과 수정일이 존재 3. 회원을 설명하는 필드가 있고 이 필드는 길이 제한이 없음 예제) package hellojpa; import javax.persistence.*; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Date; @Entity public class Member { @Id private Long id; @Column(name = "name") private String username; private Integer age; @Enumerated(EnumType.STRING) priva..
들어가며 생활 패턴이 들쭉날쭉 해지면서 아침에 뭐라도 강제로 해야겠다는 생각이 들었다. 이럴때 가장 효과적인 방법은 반복적이고 강제인 이벤트를 만드는 것! 그래서 아침에 코딩테스트 문제 하나씩 풀자! 이왕이면 여럿이서 하며 동기부여를 하자! 해서 뚝딱 스터디를 기획하고 인프런에서 모집하여 4명의 파이썬 모닝 알고리즘 스터디를 시작했다. 모집 글과 규칙, 진행 방식은 아래와 같았다. 이제야 눈에 보이지만 오랜만에 직접 모집해보는 스터디라 부족함도 있었다. 회고는 KPT로 짤막하게 남겨보려 한다. Keep : 잘하고 있는 점. 계속 했으면 좋겠다 싶은 점. Problem : 뭔가 문제가 있다 싶은 점. 변화가 필요한 점. Try : 잘하고 있는 것을 더 잘하기 위해서, 문제가 있는 점을 해결하기 위해서 우리..
@Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라고 한다. JPA를 사용해서 테이블과 매핑할 클래스라면 @Entity 필수! 주의사항 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 X 저장할 필드에 final 사용 X @Entity의 속성: name @Entity public class Member { ... } JPA에서 사용할 엔티티 이름을 지정한다. 기본값: 클래스 이름을 그대로 사용(예: Member) 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. @Table @Table은 엔티티와 매핑할 테이블 지정 @Entity @Table(name="MEMBER") public..
간단히 말해서 플러시란? 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것 플러시 발생 - 변경 감지(Dirty Checking) - 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 - 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시하는 방법 1. em.flush() : 직접 호출 2. 트랜잭션 커밋 : 플러시 자동 호출 됨 3. SQL 쿼리 실행 : 플러시 자동 호출 됨 혹시 플러시를 하게 되면 1차 캐시가 다 지워지나요? 아닙니다. 1차 캐시는 다 유지가 됨! 오직 영속성 컨텍스트에 있는 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송함! 혹은 변경 감지에 의해 변경된 내용만 반영되는 과정이다. JPQL 쿼리 실행시 플러시가 자동으..
들어가기 전에 참고 자료 - JPA 구동 방식 영속성 컨텍스트 "엔티티를 영구 저장하는 환경" 이라는 뜻이다. 논리적인 개념이므로 눈에 보이지는 않는다. 일종의 공간이라고 생각하면 된다. 엔티티를 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. EntityManager.persist(entity); 엔티티의 생명주기 - 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); - 영속(managed) : 영속성 컨텍스트에 관리되는 상태 //객체를 생성한 상태(비영속) Member member = ..
JPA Java Persistence API, 자바 진영의 ORM(Object Relational Mapping, 객체 관계 매핑) 기술 표준. JPA는 자바 표준 명세, 즉 인터페이스의 모음이다. 애플리케이션과 JDBC 사이에서 동작한다. JPA 구동 방식 JPA 동작 - 저장, 조회 JPA를 왜 사용해야 하는가? 생산성 - JPA와 CRUD(트랜잭션 안에서) 저장: jpa.persist(member) 조회: Member member = jpa.find(memberId) 수정: member.setName("변경할 이름") 삭제: jpa.remove(member) 유지보수 - 기존: 필드 변경시 모든 SQL 수정 - JPA: 필드만 추가하면 된다 패러다임의 불일치 해결 1. JPA와 상속 //저장시 개발..
문제설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 participant completion return ["leo", "kiki..