Spring/JPA

https://zzang9ha.tistory.com/399 Spring Boot SQL ์„ค์ •(hibernate, logging) ๐Ÿ“Ž Spring Boot SQL ์„ค์ •(hibernate, logging) ์•ˆ๋…•ํ•˜์„ธ์š”, Spring Boot์˜ hibernate SQL ์„ค์ •์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์šด์˜์„ ํ•˜๋‹ค๋ณด๋ฉด ์ˆ˜ํ–‰๋œ ์ฟผ๋ฆฌ๋ฌธ์— ๋Œ€ํ•ด ํŒŒ์•…ํ•˜๊ณ , DB์—์„œ ๊ฒฐ๊ณผ๊ฐ’์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์„๋•Œ๊ฐ€ zzang9ha.tistory.com
https://sewonlog.tistory.com/27 [JPA] Cannot call sendError() after the response has been committed ๐Ÿ’‍โ™€๏ธ๋‚ด๊ฐ€ ์›ํ–ˆ๋˜ ๊ฒฐ๊ณผ ๊ทธ๋ฃน์„ ์กฐํšŒํ•œ ํ›„ ๊ทธ๋ฃน์— ํฌํ•จ๋œ ๋ฉค๋ฒ„๋“ค์„ ์ค‘์ฒฉ json์œผ๋กœ ์ถ”์ถœํ•˜๋ ค๊ณ  ํ–ˆ์Œ ๊ทธ๋ฃน ์—”ํ‹ฐํ‹ฐ์— ๋ฉค๋ฒ„ ๋ฆฌ์ŠคํŠธ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ `@OneToMany` ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๋ฉค๋ฒ„ ์—”ํ‹ฐํ‹ฐ์— ์žˆ sewonlog.tistory.com ์ด ๋ฌธ์ œ๋ฅผ @JsonIgnore๋กœ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ,,, ๋‹ค๋ฅธ ๋ฌธ์ œ ์‚ฌํ•ญ์ด ์žˆ์–ด์„œ ์‹คํŒจ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• 1. `@JsonIgnore` : json ๋ฐ์ดํ„ฐ์— ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ๋Š” null๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ์— ํฌํ•จ๋˜์ง€ ์•Š์Œ 2. `@JsonManagedReference`..
๐Ÿคท‍โ™€๏ธQueryDSL ์ด๋ž€? ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ์ฟผ๋ฆฌ ์–ธ์–ด(HQL: Hibernate Query Language)์˜ ์ฟผ๋ฆฌ๋ฅผ ํƒ€์ž…์— ์•ˆ์ „ํ•˜๊ฒŒ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ •์  ํƒ€์ž…์„ ์ด์šฉํ•˜์—ฌ SQL๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ ์ž๋ฐ” ์ฝ”๋“œ๋กœ SQL๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ปดํŒŒ์ผ ์‹œ์— ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•˜์—ฌ ์ž˜๋ชป๋œ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๐ŸŒฑ์ฝ”๋“œ์— ์ ์šฉํ•˜๊ธฐ - maven pom.xml ์˜์กด์„ฑ ์ถ”๊ฐ€ com.querydsl querydsl-jpa 5.0.0 com.querydsl querydsl-apt 5.0.0 querydsl-apt apt(annotation processing tool)์ด๊ณ  @Entity๋กœ ํ‘œ์‹œ๋œ ๊ฐ์ฒด๋“ค์„ Q-type ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค. plugin ์„ค์ • com.mysema..
JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” DB ๊ธฐ๋ณธ ํ‚ค ํ• ๋‹น ์ „๋žต์€ ์ง์ ‘ ํ• ๋‹น ๋ฐฉ์‹, ์ž๋™ ์ƒ์„ฑ ๋ฐฉ์‹ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. โœ๏ธ์ง์ ‘ ํ• ๋‹น ๋ฐฉ์‹ ํ•„๋“œ์— @Id ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค. @Id private int userNo; @Column ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ฐ ํ•„๋“œ ์œ„์— ๋ถ™์—ฌ์„œ ์ปฌ๋Ÿผ๋ช…์„ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด JPA๊ฐ€ ์•Œ์•„์„œ camelCase๋กœ ์ž‘์„ฑ๋œ ํ•„๋“œ๋ช…์„ snake_case๋กœ ์ž‘์„ฑ๋œ ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ๊ณผ ๋งคํ•‘์‹œ์ผœ์ค€๋‹ค. @Column(name = "user_id") private String userId; (camelCase)userId (snake_case)user_id ํ•ด๋‹น ์ „๋žต์€ Application์—์„œ ์ง์ ‘ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ํ• ๋‹นํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค! โœ๏ธ์ž๋™ ์ƒ์„ฑ ๋ฐฉ์‹ @Id์™€ @GeneratedValue๋ฅผ ์‚ฌ์šฉํ•ด์ค€๋‹ค. 4๊ฐ€์ง€ ๋ฐฉ์‹์ด ์กด์žฌํ•จ(..
JPA๋Š” update ๋ฉ”์†Œ๋“œ๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  save ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ €์žฅ๊ณผ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ํ•œ๋ฒˆ์— ์ œ๊ณตํ•˜๊ณ  ์žˆ์Œ ๋”ํ‹ฐ ์ฒดํ‚น(Dirty Checking) ์ด๋ž€? ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๊ฐ€ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ž๋™ ๊ฐ์ง€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. Dirty Checking์€ ์ด๋ฏธ ์˜์†ํ™” ๋œ ์—”ํ‹ฐํ‹ฐ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ์ž‘๋™ํ•จ ๋”ํ‹ฐ ์ฒดํ‚น์ด ์ผ์–ด๋‚˜๋Š” ํ™˜๊ฒฝ์€ ์•„๋ž˜ ๋‘๊ฐ€์ง€ ์กฐ๊ฑด์ด ์ถฉ์กฑ ๋˜์–ด์•ผ ํ•จ ์˜์† ์ƒํƒœ(Managed) ์•ˆ์— ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ์ธ ๊ฒฝ์šฐ Transaction ์•ˆ์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ ๋”ํ‹ฐ ์ฒดํ‚น์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” update ์ฟผ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•จ JPA์—์„œ ๋ณ€๊ฒฝ๋œ ํ•„๋“œ๋งŒ update ํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๋Š”, ๋ชจ๋“  ํ•„๋“œ๋ฅผ Update ์ฟผ๋ฆฌ๋กœ ๋งŒ๋“ค๋ฉด ..
sebarii
'Spring/JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก