![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/l8Oqd/btsplqAN5b7/IwbrbWSJwxTRgIHfGXGHZk/img.png)
Member Entity @Data @Entity public class Member { @Id @Column(name = "MEMBER_ID") @GeneratedValue // strategy 생략 시 AUTO 전략 사용 private Long id; private String name; private String city; private String street; private String zipcode; } Order Entity @Data @Entity @Table(name="ORDERS") public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") private Long id; @Column(name = "MEMBER_ID") pr..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/b2fEQz/btspmLxnNkf/KK7ve16mV1vIKLhXCkqBQK/img.png)
기본키 매핑 방법 직접 할당 : @Id 만 사용 자동생성 : @GeneratedValue 사용 IDENTITY : 데이터 베이스에 위임. MySQL SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE, @SequenceGenerator 필요 TABLE : 키 생성용 테이블, 모든 DB에서 사용, @TableGenerator 필요 AUTO : 방언에 따라 자동 지정 IDENTITY 전략의 특징 기본키 생성을 데이터베이스에 위임 주로 MySQL, PostgreSQL, SQL Server, DB2 에서 사용 JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행 AUTO_INCREMENT 는 데이터베이스에 insert sql을 실행한 이후 ID 값을 알 수 있음 IDENTITY 전략은 e..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/Keaw9/btsmUIpDVNk/1iHXIPUgv1hTEROMkjDOHK/img.png)
엔티티 매핑 소개 - 객체와 테이블 매핑 : @Entity, @Table - 필드와 컬럼 매핑 : @Column - 기본 키 매핑 : @Id - 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity - @Entity 가 붙은 클래스는 JPA가 관리하는 클래스이자 엔티티이자 - 기본 생성자 필수 - final, enum, interface, inner 클래스는 엔티티 클래스로 사용할 수 없음 - 저장할 필드에 final을 사용할 수 없음 - name 속성 : JPA에 사용할 엔티티 이름을 지정 @Table - @Table은 엔티티와 매핑할 테이블을 지정할 수 있다 데이터베이스 스키마 자동 생성 - DDL 을 애플리케이션 실행 시점에 자동 생성 - 테이블 중심 -> 객체 중심 - 데이터..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/sNeKZ/btsmYL69Zax/JXQCOkB0uisES8XYwcuKP1/img.png)
1차캐시 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); // 1차 캐시에 저장됨 em.persist(member); // 1차 캐시에서 조회 Member findMember = em.find(Member.class, "member1"); - find 를 사용하여 데이터 조회 시 데이터베이스를 먼저 찾는것이 아닌 1차 캐시를 먼저 조회해서 데이터를 찾음 Member findMember2 = em.find(Member.class, "member2"); 영속 엔티티의 동일성 보장 - 1차 캐시로 반복 가능한 읽기 등급의 트랜잭션 격리 수준을 데이터베이스가 아닌 애플리케이션 차원에서 제공 엔티티 등록 - 트랜잭션..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/ycajr/btsmWkBYrbf/bCC2D6Q5PdUScSoIYqDkXK/img.png)
영속성 컨텍스트 정의 - JPA를 이해하는데 가장 중요한 용어 - 엔티티를 영구 저장하는 환경 - EntityManager.persist(entity) - 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 엔티티의 생명주기 - 비영속 (new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 - 영속 (managed) : 영속성 컨텍스트에 관리되는 상태 - 준영속 (detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 - 삭제 (removed) : 삭제된 상태 비영속 상태 - JPA 와 전혀 관계가 없는 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속상태 // 비영속 ..
N+1 상황 (뇌피셜) 일반적인 게시판 (제목을 클릭하는,,) 은 게시글과 댓글을 한번에 가져올 필요가 없다 게시글 제목을 클릭을 하면 id 를 통해 해당 id에 해당하는 게시글과 그 게시글에 달린 댓글을 가져온다. 성능상의 문제는 없음. 게시글 한개에 댓글이 달려봤자.. 얼마나 달리겠어.. 내가 생각한 N+1 문제가 생길 수 있는 곳. .? 인스타그램처럼 무한스크롤 형식이 문제될 것 같음. 왜냐,, 한개의 인스타 글에는 사진, 글, 댓글 정보등 한번에 많은 정보를 가져와야함.. 그래서 하나의 피드에 많은 연관 엔티티가 있고 EAGER 로 한번에 가져오려고,, 할 수 있음,, 밑에처럼,, @Test fun OnePlusNTests() { val response = boardRepository.findAl..
예제 프로젝트에서 양방향 연관관계 연습하다가 자주 만났던 에러,, ToString StackOverFlow,, toString 을 잘 살펴봤어야 했다..! 에러 발생 상황 양방향 관계를 가지는 Team 과 Member을 설계했음 양방향으로 설정한 이유 : Team 에서도 Member 을 조회하고 Member에서도 Team 을 조회하는 기능이 필요할 수 있기 때문 Team 과 Member 엔티티는 다음과 같다 @Entity data class Member( @Id val id: String, @ManyToOne var team: Team ) { override fun toString(): String { return "Member(id='$id', name='$name', email='$email', ph..
- Total
- Today
- Yesterday
- 인덱스
- EC2
- Travis CI
- TCP
- 기술면접
- level0
- db
- OS
- graphql
- JPA
- 프로그래머스
- ddl-auto
- nginx
- Til
- 운영체제
- 트랜잭션
- 네이버클라우드
- ORA-27125
- N+1
- spring
- 람다식
- CodeDeploy
- AWS
- SpringSecurity
- 파일업로드설정
- Oracle
- SpringGraphQL
- 트랜잭션격리성
- ci/cd
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |