| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- spring
- java
- jsp
- oracle
- 프런트엔드
- 백엔드
- Next.js
- 자바스크립트
- SQL
- jpa
- node.js
- JavaScript
- 쿼리
- 프론트엔드
- 자바
- BACK-END
- 정리
- 코드테스트
- web
- 디자인 패턴
- 프로그래머스
- 스프링부트
- 오라클
- 서버
- 스프링
- MySQL
- 미니정리
- 데이터베이스
- 알고리즘
- 코드 테스트
- Today
- Total
목록JPA (18)
참치코더의 꿈 메모장
@MappedSuperclass - 추상 클래스랑 비슷한데, @Entity는 실제 테이블과 매핑되지만 @MappedSuperclass는 실제 테이블과는 매핑되지 않는다.- 단순히 매핑 정보를 상속할 목적으로만 사용된다.12345678910111213141516171819202122232425262728293031323334353637// @MappedSuperclass로 추상 클래스를 생성@MappedSuperclasspublic abstarct class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; } // 1. 전혀 상관없는 Memb..
객체지향에서는 클래스 상속을 통해 공통 속성을 물려주지만, 관계형 데이터베이스는 상속 개념이 없다. 그래서 JPA는 상속 구조를 테이블 구조로 변환하기 위해 3가지 전략을 사용한다. 1. 단일 테이블 전략(SINGLE_TABLE) : 모든 자식 클래스의 데이터를 하나의 테이블에 모두 저장하는 것 (가장 단순하고 성능이 좋다.)12345678910111213141516171819202122@Entity@Inheritance(strategy = InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name = "DTYPE")public abstract class Item { @Id @GeneratedValue private Long id; private S..
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124// 일대일(OneToOne) @Entitypublic class Member { @Id @GeneratedValue private Long id; private String name; @OneToOne ..
일대다 관계(OneToMany) - 하나의 엔티티가 여러 엔티티를 가질때 발생 ex) 하나의 팀에 여러 명의 회원이 속함 구조 - 주인(Owner) : 일(one) 쪽에 위치- 외래키(FK) : 다(Many) 쪽 테이블에 존재 - 외래키가 다(Many)쪽에 있는 상태(관계형 데이터베이스는 절대적인 조건을 가진다)에서 객체 관점으로 1:多로 관리를 한다면 주인 쪽인 1이(Team) Member 테이블의 외래키를 관리한다는 점에서 이상한 모양의 데이터베이스 설계도가 나오게 된다. (실제 DB 테이블과 객체 사이에 리버스 모양으로 관리가 된다.) - JPA는 이걸 지원하지만 굉장히 굉장히 비효율적이기 때문에 (나는 Team을 바꿨는데? 내부적으로 왜 Member 테이블이 update 되었다고 로그가 ..
양방향 매핑 - 두 엔티티가 서로를 참조하는 관계 단방향 매핑은 Member -> Team (다 : 일)만 참조하지만,양방향 매핑은 Member -> Team, Team -> Member 둘 다 참조한다.12345678910111213141516171819202122232425262728293031// Member.java @Entity@Getter@Setterpublic class Member { @Id @GeneratedValue private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") // 외래키(주인) private Team team; } // Team.java @En..
JPA에서 단방향 연관관계는 엔티티 A -> B 방향으로만 참조가 존재하고, B -> A 방향은 없는 구조를 말한다. 단방향 연관관계 - Member가 Team을 참조하지만, Team은 Member를 모르는 경우가 단방향 연관관계이다. Member -> Team : O (참조 존재)Team -> Member : X (참조 없음)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105// Team..
- 오늘 개인 프로젝트 진행하면서 DB를 수정하면 관련 전체 코드를 수정해야 해서 데이터 최초 생성 시간이랑 수정 시간을 어떻게 해야할지 고민하다가 관련 내용을 찾아서 정리를 해보았다. - 일단 결론은 데이터베이스 생성, 수정 시간은 모든 테이블에서 사용하므로, 공통 엔티티를 만들어서 상속 받아 사용하면된다. 시간 뿐만 아니라 공통적으로 필요할것 같은 컬럼은 공통 엔티티에서 처리를 하면 된다. ^^ 123456789101112131415161718192021222324252627282930313233343536373839404142434445// 1. @EnableJpaAuditing 추가// 일단 전역으로 공통 엔티티를 사용하려면 스프링 부트 main 위에 @EnableJpaAuditing을 추..
IDENTITY 전략 - DB(AUTO_INCREMENT)가 insert 실행 시점에 PK를 만들어줌- 따라서 em.persist(entity) 하면 JPA는 즉시 insert 쿼리를 날림 (flush 강제 발생)- 그 insert 결과로 생성된 PK를 가져와서 엔티티 객체에 채워 넣음 -> 이러한 이유들 때문에 배치 insert(모여서 한 번에 쓰기)가 잘 안 됨.-> JPA 1차 캐시나 영속성 컨텍스트에서 ID를 바로 알아야 하니까 insert를 바로 실행 한다. SEQUENCE 전략 - 오라클 / PostgreSQL처럼 DB가 시퀀스 객체를 지원하는 경우 사용할 수 있다.- em.persist(entity) 하면 insert 전에 먼저 시퀀스에서 PK를 뽑아온다.- JPA가 그 값을 엔티티에 할당한..