[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 3. ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘

2023. 2. 25. 14:56ยทSpring/Spring JPA ๊ธฐ๋ณธ

 

์—”ํ‹ฐํ‹ฐ ๋งคํ•‘

 

@Entity

@Entity
public class Member {
    @Id @GeneratedValue
    private Long id;

    private String username;
}

 

@Entity๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌ

 

JPA๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ํด๋ž˜์Šค๋Š” @Entity ํ•„์ˆ˜

 

๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ•„์ˆ˜(ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” public ๋˜๋Š” protected ์ƒ์„ฑ์ž)

 

name ์†์„ฑ

@Entity(name = "Member")
public class Member {

 

JPA์—์„œ ์‚ฌ์šฉํ•  ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค.

 

๊ธฐ๋ณธ๊ฐ’: ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ(์˜ˆ: Member)

 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ž๋™ ์ƒ์„ฑ

jpa:
  hibernate:
    ddl-auto: create

 

DDL์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ ์— ์ž๋™ ์ƒ์„ฑ

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฉ์–ธ์„ ํ™œ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๋Š” ์ ์ ˆํ•œ DDL ์ƒ์„ฑ 

 

DDL(Data Definition Lanuage) : ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ,์ˆ˜์ •,์‚ญ์ œํ•˜๋Š” ์—ญํ• ์˜ ์–ธ์–ด 

 

 

 

 

 

 

ํ•„๋“œ์™€ ์ปฌ๋Ÿผ ๋งคํ•‘

 

@Column

@Column(name = "name")
private String username;

 

์ปฌ๋Ÿผ ๋งคํ•‘ 

 

name ์†์„ฑ : ๊ฐ์ฒด๋Š” username / DB์—๋Š” name

 

 

 

@Enumerated

@Enumerated(EnumType.STRING)
private RoleType roleType;

 

์ž๋ฐ” enum ํƒ€์ž…์„ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์˜ ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

@Enumerated ์• ๋…ธํ…Œ์ด์…˜์—๋Š” ๋‘ ๊ฐ€์ง€ EnumType์ด ์กด์žฌํ•œ๋‹ค.

 

EnumType.ORDINAL : enum ์ˆœ์„œ ๊ฐ’์„ DB์— ์ €์žฅ
EnumType.STRING : enum ์ด๋ฆ„์„ DB์— ์ €์žฅ
 

 

 

 

@Temporal

@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;

๋‚ ์งœํƒ€์ž…(java.util.Date, java.util.Calendar)์„ ๋งคํ•‘ํ• ๋•Œ ์‚ฌ์šฉ

 

 

TemporalType.DATE: ๋‚ ์งœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ dateํƒ€์ž…๊ณผ ๋งคํ•‘ (์˜ˆ: 2013-10-11)


TemporalType.TIME: ์‹œ๊ฐ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ timeํƒ€์ž…๊ณผ ๋งคํ•‘ (์˜ˆ: 12:00:00)


TemporalType.TIMESTAMP: ๋‚ ์งœ์™€ ์‹œ๊ฐ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ timestampํƒ€์ž…๊ณผ ๋งคํ•‘ (์˜ˆ:2013-10-11 12:00:00)

 

 

 

@Lob

@Lob
private String description;

 

 

๋งคํ•‘ํ•˜๋Š” ํ•„๋“œ ํƒ€์ž…์ด ๋ฌธ์ž๋ฉด CLOB ๋งคํ•‘, ๋‚˜๋จธ์ง€๋Š” BLOB ๋งคํ•‘

 

CLOB: String, char[], java.sql.CLOB

 

BLOB: byte[], java.sql.BLOB

 

 

@Transient

@Transient
private int temp;

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒ๊ด€์—†์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ํ•„๋“œ๋ฅผ ์ง€์ •ํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ, ์กฐํšŒ ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

๊ธฐ๋ณธ ํ‚ค ๋งคํ•‘

@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

 

 

์ง์ ‘ ํ• ๋‹น: @Id๋งŒ ์‚ฌ์šฉ


์ž๋™ ์ƒ์„ฑ(@GeneratedValue)

 

 

IDENTITY

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)

 

๊ธฐ๋ณธ ํ‚ค ์ƒ์„ฑ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ„์ž„

 

์›๋ž˜๋Š” commit ์‹œ์ ์— INSERT SQL ์„๋ณด๋‚ธ๋‹ค .

 

IDENTITY : em.persist(memberA) -> ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— memberA๋ฅผ ๋„ฃ์„ ๋•Œ PK๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค .  

 

 

DB์— ๊ฐ’์„ ๋„ฃ์–ด๋ด์•ผ(INSERT ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค๋ด์•ผ) PK๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ํ›„์— PK๋ฅผ ์ฝ์–ด์˜จ๋‹ค . 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— INSERT SQL์„ ์‹คํ–‰ํ•œ ์ดํ›„์— ID ๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 

 

IDENTITY ์ „๋žต์€ em.persist() ์‹œ์ ์— ์ฆ‰์‹œ INSERT SQL ์‹คํ–‰ ํ•˜๊ณ  DB์—์„œ ์‹๋ณ„์ž๋ฅผ ์กฐํšŒ

 

 

SEQUENCE

@Entity
@SequenceGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        sequenceName = "MEMBER_SEQ",// ๋งคํ•‘ํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค ์ด๋ฆ„
        initialValue = 1, allocationSize = 1)
public class Member {

    @Id @GeneratedValue(strategy = GenerationType.SEQUENCE,
    generator = "MEMBER_SEQ_GENERATOR")
    private Long id;


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค ์˜ค๋ธŒ์ ํŠธ ์‚ฌ์šฉ

 

@SequenceGenerator ํ•„์š”

 

 

em.persist(member) ํ•  ๋•Œ member ๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๋„ฃ์œผ๋ ค๋Š”๋ฐ ( PK๋ฅผ ์•Œ์•„์•ผํ•จ )

 

์‹œํ€€์Šค ์ „๋žต์ด๋„ค ? --> DBํ•œํ…Œ ๊ฐ’์„ ์–ป์–ด์™€์•ผ๊ฒ ๋„ค ! -> ์‹œํ€€์Šค PK๋ฅผ ์–ป์–ด์˜จ ํ›„ persist 

 

์ฟผ๋ฆฌ๋“ค์€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์Œ“์—ฌ์žˆ๊ณ  --> ํŠธ๋žœ์žญ์…˜ commit ํ•˜๋Š” ์‹œ์ ์— ์ฟผ๋ฆฌ๋“ค์„ ํ˜ธ์ถœ 

 

DBํ•œํ…Œ ์‹œํ€€์Šค ๊ฐ’ ์–ป์–ด์˜ค๊ธฐ

 

 

allocationSize = 50

 

์‹œํ€€์Šค ํ•œ ๋ฒˆ ํ˜ธ์ถœ์— ์ฆ๊ฐ€ํ•˜๋Š” ์ˆ˜(์„ฑ๋Šฅ ์ตœ์ ํ™”์— ์‚ฌ์šฉ๋จ)

 

50๊ฐœ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ’์„ ์˜ฌ๋ ค๋‘๋Š” ๋ฐฉ์‹

 

 

 

TABLE

@Entity
@TableGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        table = "MY_SEQUENCES",
        pkColumnValue = "MEMBER_SEQ", allocationSize = 1)
        public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,
            generator = "MEMBER_SEQ_GENERATOR")
    private Long id;

 

ํ‚ค ์ƒ์„ฑ ์ „์šฉ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค๋ฅผ ํ‰ ๋‚ด๋‚ด๋Š” ์ „๋žต

 

@TableGenerator ํ•„์š”

 

 

  

AUTO

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;


๋ฐฉ์–ธ์— ๋”ฐ๋ผ ์ž๋™ ์ง€์ •, ๊ธฐ๋ณธ๊ฐ’

 

 

 

 

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ

www.inflearn.com

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring > Spring JPA ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 5. ๋‹ค๋Œ€์ผ[N:1] / ์ผ๋Œ€๋‹ค[1:N] / ์ผ๋Œ€์ผ[1:1] / ๋‹ค๋Œ€๋‹ค[N:M]  (0) 2023.02.27
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 4. ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘  (0) 2023.02.26
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 2. PersistenceContext (์˜์†์„ฑ ์ปจํ…์ŠคํŠธ)  (0) 2023.02.24
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 1. JPA ๊ตฌ๋™ ๋ฐฉ์‹  (0) 2023.02.24
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 0. SQL ์ค‘์‹ฌ์ ์ธ ๊ฐœ๋ฐœ ๋ฌธ์ œ์  / ORM ์ด๋ž€ ?  (0) 2023.02.23
'Spring/Spring JPA ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 5. ๋‹ค๋Œ€์ผ[N:1] / ์ผ๋Œ€๋‹ค[1:N] / ์ผ๋Œ€์ผ[1:1] / ๋‹ค๋Œ€๋‹ค[N:M]
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 4. ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 2. PersistenceContext (์˜์†์„ฑ ์ปจํ…์ŠคํŠธ)
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 1. JPA ๊ตฌ๋™ ๋ฐฉ์‹
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 3. ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”