일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- transaction
- 스프링
- 인프런
- Exception
- 스프링 핵심 기능
- 백준
- Greedy
- 스프링 핵심 원리
- QueryDSL
- Thymeleaf
- spring
- 자바
- JDBC
- Android
- Spring Boot
- java
- Servlet
- JPQL
- Proxy
- jpa
- pointcut
- http
- 알고리즘
- springdatajpa
- 김영한
- kotlin
- AOP
- 그리디
- SpringBoot
- db
- Today
- Total
목록jpa (149)
개발자되기 프로젝트
1. Address 임베디드 타입 Equals and HashCode 생성 시 Getter를 사용하도록 옵션 설정 getter를 사용하지 않고 필드에 직접 접근하면 프록시의 경우 계산이 안됨 ㅜ 그러니 getter사용하도록 . 값 타입을 사용하면 의미있는 메서드도 생성이 가능하다. validation도 공통으로 쓸 수 있고.. 여러 이점이 있음. @Embeddable public class Address { private String name; @Column(length = 10) private String city; @Column(length = 20) private String street; @Column(length = 5) private String zipcode; private String fu..
1. 값 타입 컬렉션이란?? 값 타입을 컬렉션에 담아 사용하는 것. 관계형 DB는 기본적으로 내부에 컬렉션을 담을 방법이 없음. 값만 넣을 수 있음. 그래서 컬렉션에 해당하는 것을 별도 테이블로 만들어야함. 즉 일대다 형태로 구성됨. 단 이때 값타입의 테이블은 각 속성들을 모아서 PK로 사용해야함. 만약 식별자를 만들어서 PK로 쓰면 엔티티가 됨 ㅋㅋㅋㅋ 2. 값 타입 컬렉션 값 타입을 하나 이상 저상할 때 사용 @ElementCollection, @CollectionTable 사용 @ElementCollection을 통해 값 타입 컬렉션으로 지정 @ColellectionTable을 사용해 테이블 생성 이 때 일종의 일대다 관계라 볼 수 있고, FAVORITE_FOOD와 ADDRESS가 "다"측이고, 따..
1. 값 타입 값 타입 : 인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 봐야 함. 값이니까! 그런데 객체 타입은 ==비교하면 false가 나옴.. int a = 10; int b = 10; Address a = new Address(“서울시”) Address b = new Address(“서울시”) 2. 값 타입의 비교 동일성(identity) 비교와 동등(equivalence)비교를 구분해서 사용해야 한다. 동일성(identity) 비교 : 인스턴스의 참조값을 비교. == 비교 동등(equivalence)비교 : 인스턴스 값을 비교. equals() 사용 값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야함! 값 타입의 equals() 메서드를 적절하게 재정의 필요(주로 모든 필드 사..
값 타입은 복잡한 객체 세상을 조금이라도 단순화 하려고 만든 개념이다. 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 1. 값 타입 공유 참조 임베디드 타임 같은 값 타입을 여러 엔티티에서 공유하면 위험함!!!!!!! side effect 발생 Address homeAddress = new Address("city", "street", "321654"); Member member = new Member(); member.setUserName("member1"); member.setAddress(homeAddress); em.persist(member); Member member2 = new Member(); member2.setUserName("member2"); member2.setAddr..
1. 임베디드 타입 새로운 값 타입을 직접 정의할 수 있음 JPA는 embedded type이라고 함 주로 기본 값 타입을 "모아서" 만들기 때문에 복합 값 타입이라고 함. int String과 같은 값 타입임! 2. 예시 회원 엔티티는 이름, 근무 시작일, 근무 종료일, 주소 도시, 주소 번지, 주소 우편번호를 가진다. 흠.. 공통적인 요소들이 있는데... 묶어보자. 회원 엔티티는 이름, 근무기간, 주소를 가진다. 이처럼 묶어낼 수 있는게 임베디드 타입임. Member의 구성 즉, Period, Address라는 클래스를 생성해서 값 타입으로 씀 3. 임베디드 타입 사용 방법 @Embeddable : 값 타입을 정의하는 곳에 사용 @Embedded : 값 타입을 사용하는 곳에 표시 기본생성자 필수~~ ..
1. 영속성 전이 : CASCADE 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장. CASCADE를 사용하지 않으면 일일히 저장해 줘야한다. Child와 Parent는 양방향 다대일 관계 Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); tx.commit(); 흠 귀찮은데? 요 때 쓰는게 CASCADE Parent ..
1. 지연로딩 LAZY FETCH를 사용해서 프록시로 조회. @Entity public class Member extends BaseEntity{ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; Member member = new Member(); member.setUserName("hello"); em.persist(member); em.flush(); em.clear(); Member m = em.find(Member.class, member.getId()); tx.commit(); 로그를 보면 SELECT 쿼리를 통해 member만 읽어온다. Hibernate: select member0_.MEMB..
1. Member를 조회할 때 Team도 함께 조회해아 하나..?? 2. 프록시 기초 JPA는 em.find()외에도 em.getReference()를 제공 em.find() vs em.getReference() en.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회. DB에 쿼리가 안나가는데 객체가 조회가 됨! Proxy는 진짜 객체와 껍데이는 똑같은데, 안이 텅 비었음. 내부에 target이 있는데 진짜 레퍼런스를 가르킴. em.getReference() 하는 시점에 select SQL 안나감. Member findMember = em.getReference(Member.class, member.g..