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

๐ŸŒป 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") // ์ƒ๋žต ๊ฐ€๋Šฅ..

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

์‹ค์ „ ์˜ˆ์ œ 2) ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ํ•˜๊ธฐ

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธ‰ ์›น ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๏ฟฝ www.inflearn.com ๐ŸŒˆํ…Œ์ด๋ธ” ๊ตฌ์กฐ โ˜”๊ฐ์ฒด ๊ตฌ์กฐ ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•˜์ง€๋ง๊ณ , ๋‹ค๋Œ€์ผ ๊ด€๊ณ„์—์„œ '๋‹ค' ์— ํ•ด๋‹นํ•˜๋Š” ์ฐธ์กฐ๊ด€๊ณ„๋Š” @ManyToOne๊ณผ @JoinColumn(name="๊ธฐ๋ณธํ‚ค")๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ๊ด€๊ณ„๋ฅผ ์„ค์ •์‹œ์ผœ์ค€๋‹ค. '์ผ' ๊ด€๊ณ„์—์„œ๋Š” @OneToMany(mappedBy ="์™ธ๋ž˜ํ‚ค") mappedBy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •ํ•ด์ค€๋‹ค. @Entity public class Mem..

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

5 - 3) ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๊ธฐ์ดˆ - ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธ‰ ์›น ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๏ฟฝ www.inflearn.com ๐Ÿš€ ์–‘๋ฐฉํ–ฅ ๋งคํ•‘ ์ „์— ํ–ˆ๋˜ ๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘์—์„œ Team ํ…Œ์ด๋ธ”์— Member๋ฅผ List๋กœ ์ถ”๊ฐ€ํ•ด์ค˜์„œ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋งคํ•‘ ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. @Entity public class Team { @Id @GenerateValue private Long id; private String name; @OneToMany(mappedBy = "team") // Mem..

iseunghan
'๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)