jiisoo
์ง€์ˆ˜๋กœ๊ทธ
jiisoo
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • home
  • Github
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ €์žฅ์†Œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (80)
    • Java (1)
    • Spring (30)
    • JPA (15)
    • cs (8)
      • ๋””์ž์ธํŒจํ„ด (1)
      • ๋„คํŠธ์›Œํฌ (5)
      • Database (1)
      • ์šด์˜์ฒด์ œ (1)
    • algorithm (18)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ & ์ž๋ฃŒ๊ตฌ์กฐ ์ด๋ก  (12)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด (6)
    • ๋ฉด์ ‘ ์ค€๋น„ (0)
    • ํšŒ๊ณ  (5)
      • ATDD (4)
      • ํ•™์Šตํ…Œ์ŠคํŠธ๋กœ ๋ฐฐ์šฐ๋Š” spring 2๊ธฐ (1)
      • ํ”„๋กœ์ ํŠธ (0)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํƒœ๊ทธ

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
jiisoo

์ง€์ˆ˜๋กœ๊ทธ

[Jpa] ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘
JPA

[Jpa] ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘

2023. 4. 30. 11:10

๐Ÿ’ก ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ๋งคํ•‘

  • ์‹ค์ œ ์„ค๊ณ„์ ์ธ ์ธก๋ฉด์ด ์ค‘์š”ํ•œ๋ฐ ์–ด๋–ป๊ฒŒ ๋งคํ•‘ํ•ด์„œ ์“ฐ๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

 

@Entity 

  • @Entity ๊ฐ€ ๋ถ™์€  ํด๋ž˜์Šค๋Š” JPA ๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค.
  • JPA๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ํด๋ž˜์Šค๋Š” @Entity ๊ฐ€ ํ•„์ˆ˜์ด๋‹ค.
    • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” ํ•„์ˆ˜์ด๋‹ค.
    • final ํด๋ž˜์Šค. enum, interface, inner ํด๋ž˜์Šค ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.
    • ์ €์žฅํ•  ํ•„๋“œ์— final์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 

@Table 

  • ์—”ํ‹ฐํ‹ฐ์™€ ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์†์„ฑ 
    • name : ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ” ์ด๋ฆ„
    • schema : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค schema ๋งคํ•‘

 

 

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

            <property name="hibernate.hbm2ddl.auto" value="create" />
  • ์˜ˆ์‹œ์™€ ๊ฐ™์ด xml ํŒŒ์ผ์—์„œ๋„ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • JPA๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๋”ฉ ์‹œ์ ์— DB ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ง€์›ํ•ด ์ค€๋‹ค.
    • ์‹ค๋ฌด์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฉ์–ธ์„ ํ™œ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๋Š” ์ ์ ํ•œ DDL์„ ์ƒ์„ฑ
  • ์†์„ฑ 
    • hibernate.hbm2 ddl.auto
      • create : ๊ธฐ์กด ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์ƒ์„ฑํ•œ๋‹ค. (DROP + CREATE)
      • create-drop: create์™€ ๊ฐ™์ง€๋งŒ ์ข…๋ฃŒ์‹œ์ ์— ํ…Œ์ด๋ธ”์„ drop ํ•œ๋‹ค.
      • update : ๋ณ€๊ฒฝ๋ฌธ๋งŒ ๋ฐ˜์˜ํ•œ๋‹ค.
      • validate : ์—”ํ‹ฐํ‹ฐ์™€ ํ…Œ์ด๋ธ”์ด ์ •์ƒ ๋งคํ•‘๋˜์—ˆ๋Š”์ง€๋งŒ ํ™•์ธํ•œ๋‹ค.
      • none : ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ์šด์˜์žฅ๋น„์—๋Š” ์ ˆ๋Œ€ create, create-drop, update ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. 

 

 

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

@Entity
@Getter
@Setter
@AllArgsConstructor // ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ƒ์„ฑ์ž
@NoArgsConstructor // ๊ธฐ๋ณธ์ƒ์„ฑ์ž 
public class Member {

    @Id
    private Long id;// Pk๊ฐ€ ๋ญ”์ง€ ์•Œ๋ ค์ค˜์•ผํ•œ๋‹ค.

    @Column(name = "name") // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปฌ๋Ÿผ๋ช…์„ ์„ค์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.
    private String name;

    private int age;

    @Enumerated(EnumType.STRING)
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

}

 

@Enumerated

  • ์ž๋ฐ” Enum ํƒ€์ž…์„ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํƒ€์ž…
    • EnumType.ORDINAL : Enum ์ˆœ์„œ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•œ๋‹ค.
      • enum ํƒ€์ž…์ด ์ถ”๊ฐ€, ๋ณ€๊ฒฝ, ์‚ญ์ œ ์‹œ ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ์งˆ ๊ฒฝ์šฐ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ORDINAL ํƒ€์ž…์€ ์ง€์–‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    • EnumType.STRING : Enum ์ด๋ฆ„์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•œ๋‹ค.

 

@Temporal

  • ๋‚ ์งœ ํƒ€์ž…(Date, Calendar) ์„ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ LocalDate , LocalDateTime ์‚ฌ์šฉ ์‹œ์—๋Š” ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

@Column 

  • ์ œ์ผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
  • ์†์„ฑ
    • name : ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • nullable : null ํ—ˆ์šฉ ์—ฌ๋ถ€ ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • false ์‹œ not null ์กฐ๊ฑด์ด ๋ถ™๋Š”๋‹ค.

 

 

 

๐Ÿ’ก ๊ธฐ๋ณธ ํ‚ค ๋งคํ•‘ 

  • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜
    • @Id ๋งŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ง์ ‘ ํ• ๋‹น
    • @GeneratedValue ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ํ• ๋‹น
  • IDENTITY ์ „๋žต์ผ ๊ฒฝ์šฐ
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
  • DB์— ๋“ค์–ด๊ฐ€๋ด์•ผ id ๊ฐ’์ด ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ œ์•ฝ์ด ์ƒ๊ธฐ๋Š”๋ฐ ์˜์† ์ƒํƒœ๊ฐ€ ๋˜๋ ค๋ฉด pk ๊ฐ’์ด ๋ฌด์กฐ๊ฑด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์ด ์ „๋žต์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ em.persist ํ•˜๋Š” ์‹œ์ ์— insert ์ฟผ๋ฆฌ๊ฐ€ ๋‚ ์•„๊ฐ„๋‹ค.

 

  • SEQUENCE ์ „๋žต์ผ ๊ฒฝ์šฐ
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MEMBER_SEQ_GENERATOR")
private Long id;
  • ์‹œํ€€์Šค๋ž€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.
  • pk ๊ฐ’์˜ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ
    • ๊ฒŒ์‹œํŒ์˜ ๊ธ€ ๋ฒˆํ˜ธ๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค.
      • ex) ๊ฒŒ์‹œํŒ์˜ ๊ธ€ ๋ฒˆํ˜ธ๋ฅผ ์ˆ˜๋™์œผ๋กœ + 1 ํ•ด์ค„ ํ•„์š”์—†์ด ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ํŽธ๋ฆฌํ•˜๋‹ค.
  • ์‹œํ€€์Šค ์ „๋žต
    • ๋ฏธ๋ฆฌ ๊ฐ’์„ ์˜ฌ๋ ค๋‘๋Š” ๋ฐฉ์‹
    • @SequenceGenerator : ์‹œํ€€์Šค ์ƒ์„ฑ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ์• ๋…ธํ…Œ์ด์…˜

  • call next value for MEMBER_SEQ
  • member.getId() = 1
    • DB์—์„œ ๋จผ์ € ์‹œํ€€์Šค ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ pk ๋ฅผ ์„ธํŒ…ํ•ด์ค€๋‹ค. 
  • allocationSize ๋กœ ์„ค์ •ํ•ด ์ค„ ๊ฒฝ์šฐ ๋ฏธ๋ฆฌ ์„ค์ •๋œ ๊ฐœ์ˆ˜๋งŒํผ ๋‹น๊ฒจ์™€์„œ call next ~ ์—†์ด pk๋ฅผ ์„ธํŒ…ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹น๊ฒจ์˜จ ์ˆซ์ž ์•ˆ์—์„œ๋Š” DB ํ˜ธ์ถœ ์—†์ด ๊ฐ’์„ ํ• ๋‹นํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
    • ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

 

  • Table
    • ํ‚ค ์ƒ์„ฑ์šฉ ํ…Œ์ด๋ธ” ์‚ฌ์šฉ, ๋ชจ๋“  DB์—์„œ ์‚ฌ์šฉ
    • ํ‚ค ์ƒ์„ฑ ์ „์šฉ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์‹œํ€€์Šค๋ฅผ ํ‰๋‚ด ๋‚ด๋Š” ์ „๋žต์ด๋‹ค.
    • ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • @TableGenerator ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
@Entity
@TableGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        table = "MY_SEQUENCES",
        pkColumnName = "MEMBER_SEQ", allocationSize = 1)
public class Member {

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

 

 

 

 

 

<์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธ ํŽธ ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.>

 

 

 

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

[Jpa] ๋‹ค๋Œ€์ผ[N:1], ์ผ๋Œ€๋‹ค[1:N] ์— ๋Œ€ํ•ด์„œ  (0) 2023.05.09
[Jpa] ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๊ธฐ์ดˆ  (0) 2023.05.01
[Jpa] ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ  (0) 2023.04.27
[Jpa] @OneTOOne์— ๋Œ€ํ•ด์„œ  (0) 2023.04.26
[Jpa] JPA ๋ž€?  (0) 2023.04.25
    'JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Jpa] ๋‹ค๋Œ€์ผ[N:1], ์ผ๋Œ€๋‹ค[1:N] ์— ๋Œ€ํ•ด์„œ
    • [Jpa] ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๊ธฐ์ดˆ
    • [Jpa] ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ
    • [Jpa] @OneTOOne์— ๋Œ€ํ•ด์„œ
    jiisoo
    jiisoo

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