JPA입문24 [JPA] 변경감지와 병합(merge) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 14. 변경감지와 병합 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 준영속 엔티티에 대하여 알아보자. 준영속 엔티티는 영속성 컨텍스트가 더이상 관리하지 않는 엔티티를 의미한다. 다음 코드를 살펴보자. @PostMapping("/items/{itemId}/edit") public String updateItem(@ModelAttribute("form") BookForm form, @PathVariable String itemId){ Book book = new Book(); book.setId(form.getId()); book.setName(.. BackEnd/JPA 2022. 4. 11. [JPA] 객체지향 쿼리 언어 4 (중급 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 4. 다형성 쿼리 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● TYPE - 조회 대상을 특정 자식으로 한정한다. 예를 들면, Item 중 Book, Movie를 조회해라 와 같은 JPQL은 다음과 같다. //JPQL select i from Item i where type(i) IN(Book, Movie) //SQL select i from Item i where i.DTYPE in('B', 'M'); ● TREAT (JPA2.1) - 자바에서의 다운캐스팅과 유사하다. - 상속 구조에서 부모타입을 특정 자식 타입으로 다루기 위해 사용한다. - FRO.. BackEnd/JPA 2022. 4. 10. [JPA] 객체지향 쿼리 언어 3 (중급 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 경로 표현식 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 경로 표현식 이란? => .(점) 을 찍어 객체 그래프를 탐색하는 방법을 말한다. select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name ='팀A' ● 경로 표현식 용어 정리 1. 상태 필드 : 단순히 값을 저장하기 위한 필드 (ex. m.username) 2. 연관 필드 : 연관관계를 위한 필드 - 단일 값 연관 필드 : @ManyToOne, @.. BackEnd/JPA 2022. 4. 10. [JPA] 객체지향 쿼리 언어 2 (기본 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 5. 조인 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● 내부 조인 SELECT m FROM Member m [INNER] JOIN m.team t ● 외부 조인 SELECT m FROM Member m LEFT [OUTER] JOIN m.team t ● 세타 조인 select count(m) from Member m, Team t where m.username = t.name (설명에서 세타 조인의 의미가 내가 알던것과 달라 질문글을 찾아봤는데, 다음과 같이 설명해 주셨다. => 세타조인은 동등조인이면서 동시에 sql에서 join구문 없이 사용하는 .. BackEnd/JPA 2022. 4. 9. [JPA] 객체지향 쿼리 언어 1 (기본 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● JPQL 소개 가장 단순한 조회 방법은 다음과 같다. EntityManager.find() 또는 객체 그래프 탐색을 하면서 조회할수도 있다. => a.getB().getC() 만약 나이가 18살 이상인 회원을 모두 검색하고 싶다면? 특정 조건을 기준으로 검색을 하고싶다면 어떻게 해야할까? ● JPQL 필요성 JPA를 사용하면 엔티티 객체를 중심으로 개발할수 있다. 문제는 검색 쿼리이다! 애당초 모든 DB데이터를 객체로 변환해서 검색하는 것은 불가능하다. 검색을 할 때도 테이블이 아닌 엔티티 객체.. BackEnd/JPA 2022. 4. 8. [JPA] 값 타입 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 4. 값 타입의 비교 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 인스턴스가 달라도 그 안에 값이 같으면 같은것으로 봐야한다. // primitive type 비교 int a = 10; int b = 10; System.out.println(a == b); // true // 임베디드 타입 비교 Address a = new Address("서울", "test", 7777); Address b = new Address("서울", "test", 7777); System.out.println(a == b); // false 임베디드 타입을 '==' 연산자로 .. BackEnd/JPA 2022. 4. 7. [JPA] 값 타입 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 기본값 타입 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 JPA의 데이터 타입은 크게 2가지로 분류 가능하다. (엔티티 타입, 값 타입) 1. 엔티티 타입 - @Entity로 정의하는 객체이다. - 데이터가 변해도 식별자로 지속적인 추적이 가능하다. => 예를 들어 회원 엔티티의 키나 나이값 을 변경해도 식별자로 인식 가능하다. 2. 값 타입 - int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 => 예를 들어 숫자 100을 200으로 변경하면 완전히 다른 값.. BackEnd/JPA 2022. 4. 7. [JPA] 영속성 전이와 고아 객체 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 영속성 전이 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고 싶다면? 예를 들어 부모 엔티티를 저장하면 자식 엔티티도 함께 저장되도록 말이다! 우선 영속성 전이가 안되는 기본적인 엔티티의 저장방법부터 알아보자. - parent, child // parent @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") priva.. BackEnd/JPA 2022. 4. 6. [JPA] 프록시와 연관관계 관리 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 프록시 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 한가지 의문을 가져보자. Team이라는 필드를 갖고있는 Member를 조회할때 Team도 한번에 함께 조회되어야 할까? 예를 들어 다음과 같은 코드가 있다고 해보자. Member member = entityManager.find(Member.class, 1L); System.out.println("username = " + member.getUsername()); Team team = member.getTeam(); System.out.println("Team = " + team.getName().. BackEnd/JPA 2022. 4. 6. [JPA] 고급 매핑 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 상속관계 매핑 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 관계형 데이터베이스 같은 경우 상속 관계가 없다. 대신 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사한 방식이다. 상속관계 매핑 : 객체의 상속 구조를 DB에서의 슈퍼타입, 서브타임 관계 매핑으로 해결한다. 위 그림에서 왼쪽과 같은 논리 모델을, 오른쪽과 같은 실제 물리 모델로 구현하는 방법에는 3가지가 있다. 1) 조인 전략 (각각 테이블로 변환) 2) 단일 테이블 전략 (통합 테이블로 변환) 3) 구현 클래스마다 테이블 전략 (서브타입 테이블로 변환) 다음과 같이 @Inh.. BackEnd/JPA 2022. 4. 5. [JPA] 다양한 연관관계 매핑 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 0. 연관관계 매핑시 고려할점 3가지 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany => 다대다는 실무에서 사용하면 안된다. ● 단방향, 양방향 - 테이블 외래키 하나로 양쪽 Join 가능하다. 사실상 방향이라는 개념이 없다. - 객체 참조용 필드가 있는 쪽에서 참조 대상으로만 참조가 가능하다. 한 쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향 이다. ● 연관관계의 주인 테이블은 외래 키(FK) 하나로 두 테이블의 연관관계를 .. BackEnd/JPA 2022. 4. 4. [JPA] 엔티티 매핑 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 객체와 테이블 매핑 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● @Entity 1. @Entity가 붙은 클래스를 엔티티 라고 하며, JPA가 관리한다. 2. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. 3. 주의사항 - 기본 생성자 필수(파라미터가 없는 public or protected) - final 클래스, enum, interface inner 클래스 사용 x - 저장할 필드에 final 사용 X 4. 속성 정리 - name 속성 JPA에서 사용할 엔티티의 이름을 지정할수가 있다. 만약 name 속성을 지정하지.. BackEnd/JPA 2022. 4. 2. 이전 1 2 다음