์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ ์ ๊ณตํ๋ ๊ณตํต ๊ตฌํ์ฒด๋ฅผ ๋ถ์ํด๋ด ์๋ค. SimpleJpaRepository๋ JpaRepository๋ฅผ ๊ตฌํํ๋ ๊ตฌํ์ฒด๋ก ๊ธฐ๋ณธ์ ์ธ CRUD๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์ฝ 1000 ๋ผ์ธ์ ๊ฐ๊น์ด ์์ค ์ฝ๋๊ฐ ๋ด๋ถ์ ์ผ๋ก EntityManager๋ฅผ ์ฃผ์ ๋ฐ์ JPA๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ๋ช ๊ฐ์ง ๊ตฌํ๋ ๊ธฐ๋ฅ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์กฐํ CRUD์ค R์ ํด๋นํ๋ ๊ฒ์ผ๋ก select ๋์ ์ค PK๋ก ํ row๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํฉ๋๋ค. @Override public Optional findById(ID id) { Assert.notNull(id, ID_MUST_NOT_BE_NULL); Class domainType = getDomainClass(); // (1)..
๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. Entity๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋, ๊ฐ๊ฐ์ ์๊ฐ๊ณผ ๋ด๋น์๋ฅผ ์ถ์ ํ ํ์๊ฐ ์์ต๋๋ค. ํนํ ์ค๋ฌด์์ ์ด๋ ฅ์ ๋จ๊ธฐ๊ธฐ์ํด ๋ง์ด ์ฐ์ด๋ ๊ธฐ๋ฅ์ธ๋ฐ์, ์ด๋ ๊ฒ ํ๊ธฐ ์ํด์ Entity๋ง๋ค ํ์์๋ฐ๋ผ ์์ฑ ์๊ฐ, ์์ ์๊ฐ, ์์ฑํ ์ฌ๋, ์์ ํ ์ฌ๋ ์ด ๋ค ๊ฐ์ง ์์ฑ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. JPA๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ Entity๊ฐ ๊ฒฐ๊ตญ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๊ณตํต์ ์ธ ์์ฑ์ ๋ชจ๋ ๊ฐ์ง๋ ํด๋์ค๋ฅผ ์ค๊ณํ๋ฉด ๊ฐ๋จํ ํด๊ฒฐํ ์ ์๋๋ฐ์, ๊ทธ ๋ฐฉ๋ฒ์ ํ ๋ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค. BaseEntity ์ ์ ์์ฑ ์๊ฐ, ์์ ์๊ฐ์ ๊ฐ์ง๋ Entity๋ฅผ ์์ฑํฉ๋๋ค. package io.lcalmsky.springdatajpa.domain.entity; import javax.persistence.Colu..
์ฌ์ฉ์ ์ ์ Repository Best Practice ์ฌ์ฉ์ ์ ์ Repository๋ฅผ ๋ง๋ค ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์ ์ Repository๋ผ๊ณ ํจ์, JpaRepository๋ฅผ ์์ํด์ ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๊ตฌํ์ฒด์์ ์ง์ JPA๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ MyBatis, JdbcTemplate, QueryDSL ๋ฑ์ ์ด์ฉํด ๊ตฌํํ ๊ฒ์ ๋งํฉ๋๋ค. ์๋์ ์ผ๋ก(?) ๋์ ์์ Entity๊ฐ Member, Team์ด ์กด์ฌํ๊ณ Member๋ JpaRepository๋ฅผ ์ฌ์ฉํ๊ณ Team์ ์ฌ์ฉ์ ์ ์ Repository๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ๊ทธ๋ฅ ๊ตฌํํด๋ ์๊ด์์ต๋๋ค. ํ์ง๋ง MemberRepository๊ฐ ์กด์ฌํ๋๋ฐ CustomMemberRepository๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ S..
๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. Hint SQL์์ Hint๋ฅผ ์ฌ์ฉํ๋ฏ์ด JPA์์๋ JPA ๊ตฌํ์ฒด์ ํํธ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. ์กฐํ๋ง ์ฌ์ฉํ๊ธฐ(Read Only) ๊ธฐ๋ณธ์ ์ผ๋ก JPA๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฒ๋๋ฉด ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅ๋์ด ๊ด๋ฆฌ๋๊ณ , ๊ทธ ๊ฐ์ ์์ ํ ๋ค flush()ํ๊ฑฐ๋ dirty checking์ด ๋ฐ์ํ๋ฉด ์ ๋ฐ์ดํธ ์ฟผ๋ฆฌ๋ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. Hint๋ฅผ ์ฌ์ฉํ์ฌ ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅ๋๋ ๊ฒ์ ๋ฐฉ์งํด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ง๊ณ ํน์ ๋ชจ๋ฅผ ๋ณ๊ฒฝ์ฌํญ์ ๋ํด ์ ๋ฐ์ดํธ๋์ง ์๋๋ก ํ ์ ์์ต๋๋ค. ๋จผ์ Repository์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ์๋ฅผ ์กฐํํ๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. package io.lcalmsky.springdatajpa.domain.repository; import io.lca..
๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. Fetch Join๊ณผ @GraphEntity๋ฅผ ์๊ฐํ๊ธฐ ์ ์ JPA๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๊ฒช์ ์ ์๋ ์ฌ๋ก ํ๋๋ฅผ ์๊ฐํฉ๋๋ค. Member Entity์ Team Entity๊ฐ ๋ค๋์ผ ๊ด๊ณ(@ManyToOne) ์ผ ๋ Entity ํด๋์ค์ ์๋ก์ ๊ด๊ณ๋ฅผ ํ์ํด์ค๋๋ค. Entity๊ฐ ์ฐ๊ด๊ด๊ณ๊ฐ ์๊ณ JPA๋ฅผ ์ด์ฉํ์ฌ ์กฐํํด์ผ ํ๋ ์ํฉ์์๋ ๋๋๋ก์ด๋ฉด FetchType.LAZY ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค. ๊ด๊ณ ํ์ ์ ์ํด ์์ค ์ฝ๋๋ฅผ ์ดํด๋ด ์๋ค. (์ค๋ช ์ ํ์ ์๋ import๋ฌธ ๋ฑ์ ์๋ตํ์์ต๋๋ค.) @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString public class Member ..

๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. JPA๋ ๋ณดํต ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ณ๊ฒฝํ๋ฉด ๋ณ๊ฒฝ ๊ฐ์ง(dirty checking)๋ฅผ ํตํด DB์ ์ ๋ฐ์ดํธ ํด๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. ์ด๋ฐ ์ ๋ฐ์ดํธ๋ค์ ๊ฑด ๋ณ๋ก select ์ดํ update๊ฐ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์์ฒ ๊ฑด์ ์ ๋ฐ์ดํธ ํด์ผํ๋ ๊ฒฝ์ฐ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค. JPA๋ฅผ ์ฌ์ฉํด์๋ ์ ์ฒ, ์ ๋ง ๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ ๋ฐ์ดํธ ํ๋ ๋ฒํฌ ์ ๋ฐ์ดํธ(Bulk Update)์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. @Modifying ์ ๋ํ ์ด์ ๋ฒํฌ ์ ๋ฐ์ดํธ๋ฅผ ํ๊ธฐ ์ํด์ @Query์ ํจ๊ป @Modifying ์ ๋ํ ์ด์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋์ด๊ฐ N์ด ์ด์์ธ ์ ์ฒด ํ์์ ๋์ด๋ฅผ 1์ฉ ์ฆ๊ฐ์์ผ์ผ ํ๋ค๋ ์๊ตฌ์ฌํญ์ด ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ด๋ฅผ ๊ตฌํํ ์์ค ์ฝ๋ ์ ๋๋ค. package i..
๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ ์ธํฐํ์ด์ค ์ธ์๋ ๋ฉ์๋ ์ถ๊ฐ ๋ง์ผ๋ก ์ง์ ๊ตฌํ์ฒด๋ฅผ ๊ตฌํํ์ง ์์๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฟผ๋ฆฌ ๋ฉ์๋ ๊ธฐ๋ฅ ๋ฉ์๋ ์ด๋ฆ์ผ๋ก ์ฟผ๋ฆฌ ์์ฑ ๋ฉ์๋ ์ด๋ฆ์ ๋ถ์ํ์ฌ JPQL ์ฟผ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. package io.lcalmsky.springdatajpa.domain.entity; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.ToString; import javax.persistence.*; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTE..
- Total
- 180,578
- Today
- 58
- Yesterday
- 220
- JPA
- leetcode
- Java
- Spring Data JPA
- Linux
- ์คํ๋ง ๋ฐ์ดํฐ jpa
- Spring Boot Tutorial
- ์คํ๋ง ๋ถํธ ์ ํ๋ฆฌ์ผ์ด์
- QueryDSL
- ์คํ๋ง ๋ถํธ ํํ ๋ฆฌ์ผ
- spring boot jwt
- ์คํ๋ง๋ถํธ
- spring boot app
- ์คํ๋ง ๋ถํธ ํ์ ๊ฐ์
- intellij
- ํด๋ฆฐ ์ํคํ ์ฒ
- JSON
- ํจ๊ป ์๋ผ๊ธฐ ํ๊ธฐ
- spring boot application
- ํจ๊ป ์๋ผ๊ธฐ
- @ManyToOne
- ์๊ณ ๋ฆฌ์ฆ
- ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ
- Jackson
- Spring Boot JPA
- proto3
- r
- gRPC
- ์คํ๋ง ๋ถํธ
- Spring Boot