전체 글 (383) 썸네일형 리스트형 JPA. 관계 매핑 기본.(필요할 때 다시보고 메모하기ing) 출처: https://www.youtube.com/watch?v=V2MstrRhYBE&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=14 와... 객체간의 포함관계가 데이터베이스의 일대다 관계와 대응되는 구나... But..객체간의 관계와 테이블간의 관계에 차이가 있다는 것을 알고 있어야 연관 관계의 매핑에 있어서 오류, 오류의 해결방법을 이해할 수 있습니다. JPA. 필드(field)에 적용되는 몇가지 중요 어노테이션(2)@Temporal @Lob, @Enumerated, @transient 출처: https://www.youtube.com/watch?v=WH5UbfCjoN8&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=13 1. @Temporal어노테이션 자바8 이전에는 날짜를 다루고자 할때에는 자바의 Util패키지의 Date라는 클래스타입 혹은 Calendar라는 클래스를 사용했음. 반면 DB의 날짜에 관한 타입은 3가지로 나뉨. DATE, TIME, TIMESTAMP(데이트와 타임을 섞은타입) 만약 LocalDate, LocalTime, LocalDateTime중 하나를 사용한다면 @Temporal을 사용하지 않아도 됩니다. 2. @Lob 어노테이션 Lazy loading이란 무엇인가? 예를들어 em.find()로 DB의 데이터를 가지고 와서 Use.. JPA. 필드(field)에 적용되는 몇가지 중요 어노테이션 출처: https://www.youtube.com/watch?v=C7Uu_hFnQN8&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=12 (11:00 부터) @Column어노테이션 말고 @Basic이라는 옵셔널(Optional)한 어노테이션이 있습니다.옵셔널하다는 것은 생략가능하다는 의미입니다. 만약 @Column어노테이션이 없다면 해당 필드(변수)는 @Basic어노테이션을 갖는다고 보시면 됩니다. 기본적으로 자바객체의 타입과 DB가 가지고 있는 Column의 타입은 아시다시피 다릅니다. 이 다른것을 매핑해줄수 있는 매커니즘을 JPA provider(Hibernate, JPA구현체를 말함)들은 가지고 있습니다. 매핑 메커니즘의 기본이 되는 것을 Basic이라고 하여 @.. JPA. Table를 이용한 기본키 생성전략 출처: https://www.youtube.com/watch?v=C7Uu_hFnQN8&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=12 기본키 생성 테이블을 만들면 거기서 pk가 될 id를 가지고 와서 우리가 만들고자하는 DB의 레코드 데이터는 객체정보+기본키 생성 테이블에서 가져온 pk로 구성되게 됨. 아래와 같이 코드를 구성하면 내가 예상했던 대로 그 아래와 같이 쿼리문이 나가는 것을 볼수 있다. 내가 어떠한 값을 persist(insert)해주지도 않았는데 insert가 일어나는 것을 알고 있다. 따라서 내가 pk를 1부터 사용하고 싶다면 위와 같이 initialValue를 0으로 해주고 시작하면 된다. 위와같이 기본키를 위한 테이블과 기본 테이블이 생성된 후에.. JPA. Sequence를 이용한 기본키 생성전략 출처: https://www.youtube.com/watch?v=w3s4yyzO4TU&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=11 특정DB에 적용되는 내용이므로 필요할때 보면됨 요약: Sqeuence를 이용한 기본키 생성전략 복습. 위 내용중 스키마 자동 생성? @Table 어노테이션 봤을때 보았던 내용이다. persistence.xml 혹은 application.yml파일에 스키마 자동생성 속성을 넣어주는 것을 의미함 또 한가지 주목할 점은 어노테이션이라는게 생각보다 그 관계되는 프로그램이 구체적이라는 것이다. Sequence라는 용어는 MySql에서는 쓰지 않는다. Oracle에서 쓰인다. 그래서 @SequenceGenerator는 Oracle, Postgr.. JPA 영속객체의 라이프사이클 출처: https://www.youtube.com/watch?v=vMdpdui4VkA&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=8 위와 같이 persist로 영속성 컨텍스트에 등록한 후에 바로 detach하여 영속성 컨텍스트에서 제거하여도 insert 쿼리는 DB를 향해 나감. 콘솔창에 출력되는 순서는 select, foundCustomer출력정보, insert순임. 아래 그림 참고 (이 순서를 깔끔하게 이해하기 위해서는 아래와 같이 생각하면 좋을 것 같다. persist하면 insert에 관한 쿼리가 1차 캐쉬뿐만이 아니라 쓰기지연 sql저장소에도 담긴다. 그러다 detach되면 1차 캐쉬에서는 삭제된다. 그후 em.find()로 select 쿼리를 바로 DB에.. JPA 영속성 컨텍스트의 이해 출처: https://www.youtube.com/watch?v=QBISxH_KHog&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=7 위의 Update쿼리가 생성되는 경우를 좀더 자세히 설명하면 이렇다. em.find(Customer.class, "ID0001");로 DB로부터데이터를 가지고온다(1차 캐쉬의 데이터를 가지고 온다고 생각해도 좋음) => 그렇게 정보를 가져온직후 PersistenceContext의 스냅샷을 찍는다. => setName("Song")을 통해 정보가 update되었다. => 찍어두었던 1차 캐시의 스냅샷정보와 현재 PersistenceContext의 상태를 비교한다.=> 만약에 다를 경우 update SQL쿼리를 생성하여 쓰기지연 SQL저장.. JPA 내부동작방식 출처: https://www.youtube.com/watch?v=mj7mOMqHM68&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=6 요약: EntityManager와 그 메서드를 통한 영속객체 관리. 영속성 컨택스트(Persistence Context) 무엇보다 중요한 것은 데이터를 DB에서 가져오기전에 해당 데이터를 가져오고, 트랜젝션이 종료되는시점에 DB에 데이터를 저장하기 전에 데이터가 기록되는 중간단계인 영속성 컨텍스트안의 1차 케시라는 공간이 존재한다는 것을 아는 것이 중요합니다. JPA를 사용한다는 것은 JPA에게 SQL 쿼리문을 생성하는 작업을 위임한다는 것인데 그 과정을 JPA가 어떻게 처리하는지 살펴보는 글 순수 JPA에서는 여태까지 공부하면서 봤던.. 이전 1 ··· 27 28 29 30 31 32 33 ··· 48 다음