๐ŸŒป JAVA

๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ

8-1) ํ”„๋ก์‹œ์™€ ์—ฐ๊ด€๊ด€๊ณ„ ๊ด€๋ฆฌ : ํ”„๋ก์‹œ

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธ‰ ์›น ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๏ฟฝ www.inflearn.com โœ… ํ”„๋ก์‹œ ํ”„๋ก์‹œ ํŠน์ง• ์‹ค์ œ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ์‹ค์ œ ํด๋ž˜์Šค์™€ ๊ฒ‰ ๋ชจ์–‘์ด ๊ฐ™๋‹ค ์‹ค์ œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ(target)๋ฅผ ๋ณด๊ด€ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ์‹ค์ œ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. em.find() : DB๋ฅผ ํ†ตํ•ด์„œ ์‹ค์ œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ์กฐํšŒ! em.getReference() : DB ์กฐํšŒ๋ฅผ ๋ฏธ๋ฃจ๋Š” ๊ฐ€์งœ(ํ”„๋ก์‹œ) ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ..

๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ

7-3) ๊ณ ๊ธ‰ ๋งคํ•‘ - ์‹ค์ „ ์˜ˆ์ œ4

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธ‰ ์›น ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๏ฟฝ www.inflearn.com โœ…์š”๊ตฌ ์‚ฌํ•ญ ์ถ”๊ฐ€ ์ƒํ’ˆ์˜ ์ข…๋ฅ˜๋Š” ์Œ๋ฐ˜, ๋„์„œ, ์˜ํ™”๊ฐ€ ์žˆ๊ณ  ์ดํ›„ ๋” ํ™•์žฅ๋  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋“ฑ๋ก์ผ๊ณผ ์ˆ˜์ •์ผ์ด ํ•„์ˆ˜๋‹ค. @MappedSuperclass public class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String la..

๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ

7-2) ๊ณ ๊ธ‰ ๋งคํ•‘ : Mapped Superclass ๊ณตํ†ต ๋งคํ•‘ ์ •๋ณด ์ƒ์†

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธ‰ ์›น ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๏ฟฝ www.inflearn.com ๐Ÿš€ @MappedSuperclass ๊ณตํ†ต ๋งคํ•‘ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค! ์ƒ์†๊ด€๊ณ„ ๋งคํ•‘ X ์—”ํ‹ฐํ‹ฐ X, ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ X ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๋Š” ์ž์‹ ํด๋ž˜์Šค์— ๋งคํ•‘ ์ •๋ณด๋งŒ ์ œ๊ณตํ•œ๋‹ค. ์กฐํšŒ, ๊ฒ€์ƒ‰ ๋ถˆ๊ฐ€ (em.find(BaseEntity) ๋ถˆ๊ฐ€!) ์ง์ ‘ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•  ์ผ์ด ์—†์œผ๋ฏ€๋กœ ์ถ”์ƒ (abstract) ํด๋ž˜์Šค ๊ถŒ์žฅ import javax..

๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ

7-1) ๊ณ ๊ธ‰๋งคํ•‘ : ์ƒ์†๊ด€๊ณ„ ๋งคํ•‘

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธ‰ ์›น ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๏ฟฝ www.inflearn.com โœ…์ƒ์†๊ด€๊ณ„ ๋งคํ•‘ ์ฃผ์š” ์• ๋…ธํ…Œ์ด์…˜ @Inheritance(strategy = InheritanceType. OOO) JOINED : ์กฐ์ธ ์ „๋žต @DiscripminatorColumn ์ ์šฉํ•ด์ค˜์„œ ๊ตฌ๋ณ„ํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค! SINGLE_TABLE : ๋‹จ์ผ ํ…Œ์ด๋ธ” ์ „๋žต @DiscripminatorColumn ๊ธฐ๋ณธ์œผ๋กœ ์ ์šฉ๋จ! (์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค)TABLE_PE..

๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ

6-2) ๋‹ค์–‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ : ๋‹ค๋Œ€๋‹ค[N:M]

๋‹ค๋Œ€๋‹ค ๋งคํ•‘์€ ์™ ๋งŒํ•˜๋ฉด ์•ˆ์“ฐ๋Š”๊ฒŒ ์ตœ์„ ์ด๋‹ค. ๋‹ค๋Œ€๋‹ค ๋งคํ•‘ ๋ฐฉ๋ฒ•์ด ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ @ManyToMany๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด๋‹ค. ์—ฐ๊ฒฐ ํ…Œ์ด๋ธ”์šฉ ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€ํ•ด์„œ @OneToMany๋ฅผ ์‚ฌ์šฉ (์—ฐ๊ฒฐํ…Œ์ด๋ธ”์„ ์—”ํ‹ฐํ‹ฐ๋กœ ์Šน๊ฒฉ) โœ…๋‹ค๋Œ€๋‹ค [N:M] 1. @ManyToMany ๋ฅผ ์‚ฌ์šฉ MEMBER_PRODUCT ๋ผ๋Š” ์ค‘๊ฐ„ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ์ด ๋œ๋‹ค. @Entity public class Member { @ManyToMany @JoinTable(name = "MEMBER_PRODUCT") // ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด MEMBER_PRODUCT๋ผ๋Š” ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋œ๋‹ค. private List products = new ArrayList(); // ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ ์ƒ๋žต } @Entity public class Product { @ManyToMany(map..

๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ

6-1) ๋‹ค์–‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ (๋‹ค๋Œ€์ผ, ์ผ๋Œ€๋‹ค, ์ผ๋Œ€์ผ)

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ www.inflearn.com โœ…๋‹ค๋Œ€์ผ [N:1] ๋‹จ๋ฐฉํ–ฅ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์—ฐ๊ด€๊ด€๊ณ„ public class Member{ @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne @JoinColumn(name = "TEAM_ID") // ์ƒ๋žต ๊ฐ€๋Šฅ..

iseunghan
'๐ŸŒป JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (9 Page)