일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- Android
- Greedy
- 자바
- 인프런
- 김영한
- 스프링 핵심 기능
- pointcut
- Proxy
- springdatajpa
- db
- JDBC
- 스프링 핵심 원리
- Thymeleaf
- Servlet
- QueryDSL
- java
- kotlin
- jpa
- Exception
- http
- Spring Boot
- SpringBoot
- transaction
- 백준
- AOP
- JPQL
- 그리디
- spring
- 스프링
- Today
- Total
목록jpa (149)
개발자되기 프로젝트
1. 양방향 매핑 시 가장 빈번한 실수 연관관계의 주인에 값을 입력하지 않은 실수 주인이 아닌 방향 만 연관관계를 설정하면..? - 주인이 아닌 곳에서 만 값을 입력하면 SQL 나갔다가 rollback됨 ㅋㅋ Member member = new Member(); member.setUserName("member1"); em.persist(member); Team team = new Team(); team.setName("TeamA"); //주인이 아닌 쪽에서 연관관계 설정 team.getMemberList().add(member); em.persist(team); //team이 영속상태 되면 id값이 들어감. Team은 연관관계 주인이 아니다. mappedBy는 읽기 전용이고, JPA에 update나 i..
1. 단방향, 양방향 매핑 단방향 연관관계를 양방향으로 바꿔도 table은 변화가 없다. MEMBER은 TEAM_ID(FK)와 TEAM의 PK를 Join 반대로 TEAM은 TEAM_ID(PK)와 MEMBER의 FK와 Join하면됨 즉!!!!!!!!! TABLE은 FK하나로 양방향으로 매핑이 된다!!!! 방향의 개념보다는 FK하나로 양쪽이 연관관계가 생김. 근데 객체는 그렇지 않다. 따라서 Team객체에 List가 있어야 양쪽으로 가능함. @OneToMany(mappedBy = "team") //일대다 매핑에서 나는 뭐랑 연결되어있지? Member 클래스의 Team 필드명. private List memberList = new ArrayList(); Test - Member에 setTeam을 통해 연관관계..
1. 목표 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 어떻게 매핑? 객체는.. 레퍼런스임.. object.get~ 인 반면에 테이블은 나랑 연관된 애를 찾을 때 외래키(FK)를 활용. 2. 용어 방향(Direction) : 단방향, 양방향 다중성(Multiplicity) : 다대일, 일대다, 일대일, 다대다 연관관계 주인(Owner) : 객체 양방향 연관관계는 관리 주인이 필요해! 3. 연관관계가 필요한 이유. 객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것 - 객체지향의 사실과 오해 - 4. 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. 5. 객체를 테이블에 맞춰서 모델링 하면..? 객체를 테이블에 맞..
1. PK 매핑 방법 직접 할당 : @Id만 사용 자동 생성 : @GeneratedValue - IDENTITY: 데이터베이스에 위임, MYSQL @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE --> @SequenceGenerator 필요 - TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용 --> @TableGenerator 필요 - AUTO: 방언에 따라 자동 지정, 기본값 2. IDENTITY 기본 키 생성을 DB에 위임 : 너가 알잘딱해 MySQL, PstgreSQL, SQL Server, DB2에서 사용 JPA는 보통 transacti..
1. 요구사항 회원은 일반 회원과 관리자로 구분되어야 한다. 회원 가입일과 수정일이 있어야 한다. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다. 2. Mapping Annotation 정리 @Annotation 설명 @Column 컬럼 매핑 @Temporal 날짜 타입 매핑(DATE, TIME, TIMESTAMP) : DB는 구분해서씀 @Enumerated enum타입 매핑(ORDINAL, STRING) : 항상 STRING으로 @Lob BLOB, CLOB 매핑, varchar를 넘어서는 큰 컨텐츠 @Transient 특정 필드를 컬럼에 매핑하기 않고 필드로 씀. @Enumerated - DB에는 ENUM타입이 없음. - @Enumerated(EnumType.STRING) -..
1. 엔티티 매핑 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 2. @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 함. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수!!! 기본 생성자 필수!!(JPA 스펙임) final 클래스, enum, interfacem inner클래스에 사용 못함 저장할 필드에 final 사용 멈춰! 3. @Entity 속성 name - JPA에서 사용할 엔티티 이름 지정 - 기본값 : 클래스 이름 그대로 사용 - 같은 클래스 이름이 없으면 가급적 기본 값 사용. 4. @Table @Table은 엔티티와 매핑할 테이..
1. 플러시 영속성 컨텍스트의 변경 내용을 DB에 반영 tx.commit() 실행되면 내부적으로 flush()실행됨. flush() 호출되면?? 무슨일이? - 변경감지, dirty checking - 수정된 엔티티 관련된 SQL을 생성하여 쓰기 지연 SQL저장소에 등록 - 쓰기지연 SQL 저장소의 쿼리를 DB에 전송(등록, 수정, 삭제) 영속성 컨텍스트를 flush하는 방법 - em.flush() 직접하든가 - tx.commit() 호출하면 flush() 자동으로 호출 됨. - JPQL 쿼리 실행하면 flush 자동 호출. 만약 persist(entity)하고 바로 JPQL을 통해 모든 엔티티 조회하면 DB에 반영이 안되어있기 때문에 불러올 수 없다. 따라서 JPA는 JPQL실행시 flush가 자동으로 ..
1. 엔티티조회, 1차 캐시 영속 상태는 1차 캐시에 올라가 있는 상태, persist, find로 1캐시에 들어간 상태. 영속성 컨텍스트 내부에는 "1차 캐시"가 있음 persist(entity)할 경우 1차 캐시에 저장됨. //엔티티를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); //엔티티를 영속 em.persist(member); @Id(PK)와 @Entity(객체)가 key & value로 1차캐시에 저장됨. 1차 캐시에서 id로 조회하는 경우 Member member = new Member(); member.setId("member1"); member.setUsername..