๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JPA8

[JPA] save() ์™€ saveAndFlush() ์˜ ์ฐจ์ด save ๊ธฐ๋Šฅ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์ค‘์‹ฌ์—์„œ์˜ Entity ๊ฐ์ฒด๋ฅผ ORM ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅsave() ๋ฉ”์†Œ๋“œ๐Ÿ‘‰ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—๋งŒ ์ €์žฅ (DB์— ๋ฐ”๋กœ ์•ˆ ๋‚ ๋ฆผ)save() ๋ฉ”์†Œ๋“œ๋Š” ๋ฐ”๋กœ DB ์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์—ˆ๋‹ค๊ฐ€ flush() ๋˜๋Š” commit() ์ˆ˜ํ–‰ ์‹œ DB์— ์ €์žฅ๋จ → 1์ฐจ ์บ์‹œ์— ์ €์žฅ → ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ ์‹œ flush → ๊ทธ๋•Œ INSERT ์‹คํ–‰ saveAndFlush() ๋ฉ”์†Œ๋“œ๐Ÿ‘‰ ์ €์žฅ + ์ฆ‰์‹œ flush (DB์— ๋ฐ”๋กœ INSERT ์‹คํ–‰)saveAndFlush() → ์ €์žฅ → ์ฆ‰์‹œ flush → ์ฆ‰์‹œ INSERT ์‹คํ–‰ ๋™์ž‘ ๋น„๊ต1. save() ๋ฉ”์†Œ๋“œ ๋””๋ฒ„๊น…orderRepository.save() ์ˆ˜ํ–‰ ํ›„DB ๋กœ ๋ณด๋‚ด๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์—†์Œ -> ์•„์ง DB์— ์ €์žฅ๋˜.. 2026. 3. 24.
[JPA] findById์™€ getReferenceById ์ฐจ์ด SpringBoot ํ”„๋กœ์ ํŠธ๋ฅผ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ JPA์—์„œ ์ œ๊ณตํ•˜๋Š” findById๋งŒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€getReferenceById๋„ ์•Œ๊ฒŒ ๋˜์–ด ์ •๋ฆฌ ํฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. findById() - ์ฆ‰์‹œ ๋กœ๋”ฉ๐Ÿ‘‰ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ DB์—์„œ ์กฐํšŒMember member = memberRepository.findById(1L).get();// ๐Ÿ‘‰ ์ด๋ฏธ SQL ์‹คํ–‰๋จํŠน์ง•ํ˜ธ์ถœ ์‹œ์ ์— ๋ฐ”๋กœ SQL ์‹คํ–‰์‹ค์ œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜Optional ํ˜•ํƒœ๋ผ null ์•ˆ์ „์„ฑ ์žˆ์Œ๊ฐ’์ด ์—†์œผ๋ฉด Optional.empty()์–ธ์ œ ์‚ฌ์šฉ?๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐํ•„๋“œ ๊ฐ’์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•ŒgetReferenceById() -์ง€์—ฐ ๋กœ๋”ฉ๐Ÿ‘‰ ํ”„๋ก์‹œ ๊ฐ์ฒด(๊ฐ€์งœ ๊ฐ์ฒด) ๋จผ์ € ๋ฐ˜ํ™˜ → ํ•„์š”ํ•  ๋•Œ DB ์กฐํšŒMember member = .. 2026. 3. 23.
[SpringBoot] ์—”ํ‹ฐํ‹ฐ int VS Integer ํƒ€์ž… ์ฐจ์ด int ํƒ€์ž…์€ ๊ธฐ๋ณธํƒ€์ž…์ด๊ณ , Integerํƒ€์ž…์€ ๋ž˜ํผํด๋ž˜์Šค์ด๋‹ค.๋งŒ์•ฝ ๋„๋ฉ”์ธ์— null์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด intํƒ€์ž…์€ ์—๋Ÿฌ์ด๊ณ , Integerํƒ€์ž…์€ null๊ฐ’ ์œผ๋กœ ๋ฐ›์•„๋“ค์ธ๋‹ค.๋”ฐ๋ผ์„œ, ๊ฐ€๊ฒฉ์ด ์—†์„ ๋•Œ null๋กœ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด Integerํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ๋˜๊ณ , @Column private Integer price; //๊ฐ€๊ฒฉ0์œผ๋กœ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด int ํƒ€์ž…์œผ๋กœ ํ•˜๋ฉด ๋œ๋‹ค.๋„๊ฐ’ ํ—ˆ์šฉX์ด๋ฉด int๋กœ ํ•ด์„œ @Column(nullable = false) private int price; //๊ฐ€๊ฒฉ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค. 2024. 4. 6.
[JPA] Entity PK๋Š” bigint(MySQL)-Long(java) ํƒ€์ž…์œผ๋กœ ํ•ด์•ผ ํ•˜๋Š” ์ด์œ  ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์‹œ ํ–ฅํ›„ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค๋ฉด JPA๋ฅผ ํ†ตํ•ด Entity PK๋Š” bigint ํƒ€์ž…์ด ์ข‹๋‹ค.์ค‘๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ๋ฉด int ํƒ€์ž…์ด ์ ์ ˆํ•˜์ง€๋งŒ, ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์ด ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ DB์— ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ๊ทธ ๋งŽ์€ ์ˆ˜์–ต๊ฑด์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ค ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๊ฝค ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ธฐ ๋•Œ๋ฌธ์— ์• ์ดˆ์— ๊ฐœ๋ฐœ ์‹œ bigint ํƒ€์ž…์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋น„๋ก intํ˜•์— ๋น„ํ•ด ๋””์Šคํฌ ์šฉ๋Ÿ‰์„ ๋งŽ์ด ์ฐจ์ง€ํ•˜์ง€๋งŒ ํ–ฅํ›„ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด์„  bigint ํƒ€์ž…์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค. 2024. 2. 15.
[JPA] @Setter ๋Œ€์‹  @Builder ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ  @Setter๋กœ ์ƒ์„ฑ์ž ์ด์šฉ vs @Builder๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด, @Setter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด @Builder๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํฐ ๋‹จ์ ๋“ค์ด ๋งŽ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Setter ์ƒ์„ฑ์ž๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚ฌ ์‹œ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด ์ง„๋‹ค.๋˜ํ•œ, ๋ˆ„๋ฝ๋œ ํ•„๋“œ๊ฐ€ ์žˆ์–ด๋„ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•„๋ฌด ๊ฒฝ๊ณ ๋ฅผ ์•ˆ์ค€๋‹ค.๊ฐ์ฒด๊ฐ€ “๋ถˆ์™„์ „ํ•œ ์ƒํƒœ”๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.setter๊ฐ€ public์ด๋ฉด ์™ธ๋ถ€์—์„œ ์–ธ์ œ๋“  ํ•„๋“œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค. (์บก์Аํ™” ๊นจ์ง) ์ด๋Ÿฌํ•œ ์ ๋“ค๋กœ ์ธํ•ด, ์‹ค๋ฌด์—์„œ๋Š” ์‹ค๋ฌด์—์„œ๋Š” @Setter๋ฅผ ์™„์ „ํžˆ ์—†์• ๊ณ  @Builder + private ์ƒ์„ฑ์ž ๋ฅผ ๋งŽ์ด ์ด์šฉํ•œ๋‹ค.@Builder๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ์ค„ ์ฝ”๋“œ๋กœ ๊ฐ„ํŽธํ•˜๊ณ , ์–ด๋–ค ํ•„๋“œ์— ์–ด๋–ค ๊ฐ’์„ ์ฑ„์›Œ์•ผ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด @Builder์˜ ์˜๋ฏธ์™€ ์‚ฌ์šฉ๋ฒ•์„ ์•„๋ž˜์—์„œ ์•Œ์•„๋ณด์ž. ๐Ÿ”น @.. 2024. 2. 14.
[JPA] jpa insert์‹œ default ์ ์šฉ jpa ์—”ํ„ฐํ‹ฐ default ์„ค์ •์„ ํ•˜๋ ค๋ฉด @DynamicInsert ์–ด๋…ธํ…Œ์ด์…˜๊ณผ @ColumnDefault ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ฐ™์ด ์จ์•ผ ์ ์šฉ์ด ๋œ๋‹ค. ์˜ˆ์‹œ์ฝ”๋“œ(java):package com.pnow.domain;import com.pnow.domain.user.User;import lombok.Getter;import lombok.Setter;import org.hibernate.annotations.ColumnDefault;import org.hibernate.annotations.DynamicInsert;import javax.persistence.*;import java.time.LocalDate;import java.time.LocalTime;@Setter //jpa ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด@Getter@En.. 2024. 2. 13.
[JPA] jpa ๋ฉ”์„œ๋“œ ์งˆ๋ฌธ ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ1) ์งˆ๋ฌธ ์—”ํ‹ฐํ‹ฐ๋กœ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ ์ด์ œ ๋งŒ๋“ค์–ด์ง„ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ €์žฅํ•ด ๋ณด์ž. ๋จผ์ €, src/test/java ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ com.mysite.sbb ํŒจํ‚ค์ง€์— SbbApplicationTests.java ํŒŒ์ผ์„ ์—ด์–ด ๋ณด์ž.2) SbbApplicationTests.java ํŒŒ์ผ์„ ์—ด์—ˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•ด ๋ณด์ž.package com.mysite.sbb;import java.time.LocalDateTime;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBoo.. 2024. 2. 12.
[SpringBoot] jpa ์—”ํ‹ฐํ‹ฐ 3์ ๋Œ€ jakarta ํŒจํ‚ค์ง€ ์ฃผ์˜์‚ฌํ•ญ jpa ์—”ํ„ฐํ‹ฐ ์„ค์ •ํ•  ๋•Œ ํŒจํ‚ค์ง€๋ฅผ ๋ฒ„์ „๋ณ„๋กœ ๋‹ค๋ฅด๊ฒŒ ์จ์•ผ ํ•œ๋‹ค. ์Šคํ”„๋ง๋ถ€ํŠธ 2.x ๋ฒ„์ „ import javax.* ์Šคํ”„๋ง๋ถ€ํŠธ 3.x ๋ฒ„์ „ import jakarta.* jpa 3.x๋ฒ„์ „ jakarta ํŒจํ‚ค์ง€ ์˜ˆ์‹œ:package com.mysite.sbb;import java.time.LocalDateTime;import jakarta.persistence.Column;import jakarta.persistence.Entity;import jakarta.persistence.GeneratedValue;import jakarta.persistence.GenerationType;import jakarta.persistence.Id;import lombok.Getter;import lombok.Setter;@G.. 2024. 2. 11.