# [JPA] Entity Mapping : ๊ฐ์ฒด โžก๏ธ ํ…Œ์ด๋ธ” ๋งคํ•‘
Study Repository

[JPA] Entity Mapping : ๊ฐ์ฒด โžก๏ธ ํ…Œ์ด๋ธ” ๋งคํ•‘

by rlaehddnd0422

JPA๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์šฐ์„ ์ ์œผ๋กœ ํ•ด์•ผ ํ•  ์ผ์€ ๋ฐ”๋กœ ์—”ํ‹ฐํ‹ฐ์™€ ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.  JPA๋Š” ์—”ํ‹ฐํ‹ฐ์™€ ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋งคํ•‘ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

 

1. ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•  ๋•Œ : @Entity, @Table

 

2. ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์šฉํ•  ๊ธฐ๋ณธ ํ‚ค๋ฅผ ๋งคํ•‘ํ•  ๋•Œ : @Id

 

3. ๊ฐ์ฒด์˜ ํ•„๋“œ์™€ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์„ ๋งคํ•‘ํ•  ๋•Œ : @Column

 

4. ํ…Œ์ด๋ธ”๊ณผ ํ…Œ์ด๋ธ”๊ฐ„ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ : @ManyToOne, @JoinColumn ๋“ฑ..

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด Entity์™€ ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

(์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ)


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

@Entity

JPA๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ํด๋ž˜์Šค๋Š” @Entity ์–ด๋…ธํ…Œ์ด์…˜์„ ํ•„์ˆ˜์ ์œผ๋กœ ๋ถ™์—ฌ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ฃผ์˜ํ•  ์  : JPA๊ฐ€ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ @Entity ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋Š” ๋ฐ˜๋“œ์‹œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด ์ฃผ์ง€๋งŒ, ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ

@Entity
public class Member {
	
    @Id
    private Long id;   
    private String name;
    
    public Member(){}
}

@Table

์—”ํ‹ฐํ‹ฐ์™€ ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. ex) @Table(name="ํ…Œ์ด๋ธ”๋ช…")

์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ์ƒ๋žตํ•˜๊ฒŒ ๋˜๋ฉด JPA๋Š” ์ž๋™์œผ๋กœ ํด๋ž˜์Šค ์ด๋ฆ„์„ ํ…Œ์ด๋ธ”๋ช…์œผ๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ ์˜ˆ์‹œ

@Entity
@Table(name="MEMBERK")
public class Member {
	
    @Id
    private Long id;   
    private String name;
    
    public Member(){}
}

์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด @Entity๋กœ ๋งคํ•‘๋œ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•œ ํ…Œ์ด๋ธ”๋ช…์œผ๋กœ ๋งคํ•‘ํ•ด์ค๋‹ˆ๋‹ค.

 

name ์™ธ์—๋„ @Table์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • catalog : ์นดํƒˆ๋กœ๊ทธ ๊ธฐ๋Šฅ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ catalog๋ฅผ ๋งคํ•‘
  • schema : ์Šคํ‚ค๋งˆ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ schema๋ฅผ ๋งคํ•‘
  • uniqueConstraints : DDL ์ƒ์„ฑ ์‹œ์— ์œ ๋‹ˆํฌ ์ œ์•ฝ์กฐ๊ฑด ์ƒ์„ฑ. 2๊ฐœ ์ด์ƒ์˜ ๋ณตํ•ฉ ์œ ๋‹ˆํฌ ์ œ์•ฝ ์กฐ๊ฑด๋„ ๊ฐ€๋Šฅ! ์Šคํ‚ค๋งˆ ์ž๋™ ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ DDL์„ ๋งŒ๋“ค ๋•Œ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
uniqueConstraints ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จ๋œ DDL ์ƒ์„ฑ ๊ธฐ๋Šฅ์€ ์กฐ๊ธˆ ๋’ค์— ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

JPA๋Š” ํด๋ž˜์Šค์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ ๋ณด๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ์ผํžˆ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ์ž‘์—…๋“ค์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด persistence.xml์— ๋‹ค์Œ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

<property name="hibernate.hbm2ddl.auto" value="create" />

 

value ์†์„ฑ

  • create : ๊ธฐ์กด ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑ (drop & create)
  • create-drop : ๊ธฐ์กด ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ ๋‹ค์‹œ ํ…Œ์ด๋ธ”์„ dropํ•˜๋Š” ๋ฐฉ์‹ (drop + create + drop)
  • update : ํ…Œ์ด๋ธ”์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ Update
  • validate : ์—”ํ‹ฐํ‹ฐ์™€ ํ…Œ์ด๋ธ”์˜ ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋‚จ๊ธฐ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ.
  • none : ์ž๋™ ์ƒ์„ฑ๊ธฐ๋Šฅ off

 

People ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

@Entity
@Table(name = "PEOPLE")
public class People {

    @Id
    @Column(name = "id")
    private String id;

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

    private Integer age;

    @Enumerated
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    @Lob
    private String description;

    public People() {
    }
}

 

log๋ฅผ ๋ณด๋ฉด ํ…Œ์ด๋ธ” ์ƒ์„ฑ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Hibernate: 
    
    create table PEOPLE (
       id varchar(255) not null,
        age integer,
        createdDate timestamp,
        description clob,
        lastModifiedDate timestamp,
        roleType integer,
        name varchar(255),
        primary key (id)
    )

 

์ง์ ‘ ๋งŒ๋“  ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํ‚ค๋งˆ๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์—”ํ‹ฐํ‹ฐ์™€ ํ…Œ์ด๋ธ”์„ ์–ด๋–ป๊ฒŒ ๋งคํ•‘ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋„๊ตฌ๋กœ ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์šด์˜ ์„œ๋ฒ„์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ์‹œ๋‹ค. 

 

 

<์ฐธ๊ณ ์ž๋ฃŒ>

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ