๐Ÿ๏ธ Spring/JPA

๐Ÿง @Id ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค(PK)์™€ ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๋งคํ•‘์‹œ์ผœ์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. ์ ์šฉ ๊ฐ€๋Šฅ ํƒ€์ž… ์ž๋ฐ” ๊ธฐ๋ณธํ˜• (int, long, ...) ์ž๋ฐ” ๋ž˜ํผํ˜• (Integer, Long, ...) String Date (java.util) Date (java.sql) BigDecimal BigInteger @Id๋งŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ง์ ‘ ํ• ๋‹นํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ง์ ‘ ํ• ๋‹นํ•˜๋Š” ๋Œ€์‹  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด @GeneratedValue๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๐Ÿง @GeneratedValue ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. ์†์„ฑ์œผ๋กœ๋Š” strategy๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ํ†ตํ•ด ์ž๋™ ์ƒ์„ฑ ์ „๋žต์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ๋ถ€ํ„ฐ ๊ฐ๊ฐ์˜ ์ „๋žต๋“ค์„ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค...
SEQUENCE ์ „๋žต, TABLE ์ „๋žต SEQUENCE ์ „๋žต์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” [JPA] ๊ธฐ๋ณธ ํ‚ค(Primary Key)๋งคํ•‘ - @Id, @GeneratedValue @Id ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค์™€ ๋งคํ•‘์‹œ์ผœ์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์ ์šฉ ๊ฐ€๋Šฅ ํƒ€์ž… ์ž๋ฐ” ๊ธฐ๋ณธํ˜• (int, long, ...) ์ž๋ฐ” ๋ž˜ํผํ˜• (Integer, Long, ...) String Date (java.util) Date (java.sql) BigDecimal BigIn.. ttl-blog.tistory.com SEQUENCE ์ „๋žต์˜ ์ตœ์ ํ™”. - allocationSize SequenceGenerator์˜ allocationSize์˜ ๊ธฐ๋ณธ๊ฐ’์€ 50์ž…๋‹ˆ..
๐Ÿง ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜ ๊ฐ’ ํƒ€์ž…์„ ์ปฌ๋ ‰์…˜์— ๋‹ด์•„์„œ ์‚ฌ์šฉํ•  ๋•Œ, ํ•ด๋‹น ์ปฌ๋ ‰์…˜์„ ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค. (@OneToMany ์ฒ˜๋Ÿผ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ปฌ๋ ‰์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, Integer, String, ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ๊ฐ™์€ ๊ฐ’ ํƒ€์ž…์„ ์ปฌ๋ ‰์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.) ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ปฌ๋ ‰์…˜์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์€ ๊ฐœ๋…์ ์œผ๋กœ ๋ณด๋ฉด 1๋Œ€ N ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ๊ฐ’ ํƒ€์ž…์„ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์€ ๊ฐ’ ํƒ€์ž…์„ ์†Œ์œ ํ•œ ์—”ํ‹ฐํ‹ฐ์˜ ๊ธฐ๋ณธ ํ‚ค์™€ ๋ชจ๋“  ๊ฐ’ ํƒ€์ž… ํ•„๋“œ๋ฅผ ๋ฌถ์–ด์„œ PK๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ์—”ํ‹ฐํ‹ฐ์˜ ๊ธฐ๋ณธ ํ‚ค๋ฅผ PK๊ฒธ FK๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.) ๐Ÿง @ElementCollection ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜์„ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. RD..
@Access JPA๊ฐ€ ์—”ํ‹ฐํ‹ฐ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•„๋“œ ์ ‘๊ทผ : AccessType.FILED ํ•„๋“œ์— ์ง์ ‘ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ ์ ‘๊ทผ ๊ถŒํ•œ์ด private์ด์–ด๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ : AccessType.PROPERTY ์ ‘๊ทผ์ž(getter)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค ์‚ฌ์šฉ @Entity @Access(AccessType.FIELD) public class Member { @Id private String id; } @Access๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ @Access๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด @Id์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. @Id๊ฐ€ ํ•„๋“œ์— ๋‹ฌ๋ ค์žˆ์œผ๋ฉด ํ•„๋“œ ์ ‘๊ทผ, Getter์— ๋‹ฌ๋ ค์žˆ์œผ๋ฉด ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค...
@Transient ํ•ด๋‹น ํ•„๋“œ๋ฅผ ์˜์† ๋Œ€์ƒ์—์„œ ์ œ์™ธ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์กฐํšŒํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด์— ์ž„์‹œ๋กœ ์–ด๋–ค ๊ฐ’์„ ๋ณด๊ด€ํ•  ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. @Entity public class Member { @Id private String id; private Stirng username; private Stirng password; @Trasient private Stirng checkPassword; } ๐Ÿ“” Reference ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ๋ณธ..
@Basic ์ž๋ฐ”์˜ ๊ธฐ๋ณธ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ๋งคํ•‘ํ•ด์ฃผ๋Š”? ์• ๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ ์‚ฌ์šฉํ•  ์ผ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์„ค๋ช… The simplest type of mapping to a database column. The Basic annotation can be applied to a persistent property or instance variable of any of the following types: Java primitive types, wrappers of the primitive types, String, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Ti..
@Lob ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ BLOB, CLOB ํƒ€์ž…๊ณผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. @Lob์—๋Š” ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ ์— ๋งคํ•‘ํ•˜๋Š” ํ•„๋“œ ํƒ€์ž…์ด ๋ฌธ์ž๋ฉด CLOB์ด๊ณ , ๋‚˜๋จธ์ง€๋Š” BLOB์œผ๋กœ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. (Lob์€ Large Object์˜ ์ค„์ž„๋ง์ž…๋‹ˆ๋‹ค) CLOB : ๋ฌธ์ž ๋Œ€ํ˜• ๊ฐ์ฒด, BLOB : ์ด์ง„ ๋Œ€ํ˜• ๊ฐ์ฒด (์ด๋ฏธ์ง€, ๋™์˜์ƒ ๋“ฑ๋“ฑ) @Lob ์ฃผ์„์€ @Basic ํ˜น์€ @ElementCollection ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Mysql์˜ TEXT ๋งคํ•‘ํ•˜๋Š” ๋ฒ• @Column(columnDefinition = "TEXT") Reference ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„..
์‹œ์ž‘์— ์•ž์„œ ์ž๋ฐ” 8๋ถ€ํ„ฐ LocalDate, LocalDateTime์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, @Temporal ์–ด๋…ธํƒœ์ด์…˜์„ ์ƒ๋žตํ•˜์—ฌ๋„ LocalDate์™€ LocalDateTime์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @Entity public class Member{ @Id private Long id; private LocalDateTime createdDate; } @Temporal ๋‚ ์งœ ํƒ€์ž…(java.util.Date, java.util.Calendar)์„ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์˜ Date ํƒ€์ž…์—๋Š” ๋…„์›”์ผ ์‹œ๋ถ„์ดˆ๊ฐ€ ์žˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” date(๋‚ ์งœ), time(์‹œ๊ฐ„), timestamp(๋‚ ์งœ์™€ ์‹œ๊ฐ„)๋ผ๋Š” ์„ธ ๊ฐ€์ง€ ํƒ€์ž…์ด ๋ณ„๋„๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. @Temporal์„ ์ƒ๋žตํ•˜..
๋ง ๋ž‘
'๐Ÿ๏ธ Spring/JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (8 Page)