JPA - Entity ์ƒ์„ฑ์„ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜

2023. 11. 15. 23:21ใ†๋ฐฑ์—”๋“œ/Spring Boot

๐Ÿง Entity๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด์ž.

 

1.  @Entity

  • ์ž‘์„ฑํ•œ ํด๋ž˜์Šค๋ฅผ JPA Entity๋กœ ์ง€์ •ํ•˜๋Š” ์—ญํ• ๋กœ ๊ฐ์ฒด์™€ DB ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋œ๋‹ค. 
  • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž(ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ์ƒ์„ฑ์ž)๋ฅผ ํ•„์ˆ˜๋กœ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
    (๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ) 
@Entity
public class Player {
    // filed or method 
    
    // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž 
    public Player() {
        // ๋‚ด์šฉ 
    }
}

 

 

 

 

2.  @Table

  • Entity์™€ ๋งคํ•‘๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ์†์„ฑ(ํ…Œ์ด๋ธ” ์ด๋ฆ„, ์นดํƒˆ๋กœ๊ทธ ์Šคํ‚ค๋งˆ ๋“ฑ..)์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋งคํ•‘ํ•œ ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ํ…Œ์ด๋ธ” ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. 
@Entity
@Table(name = "player_info")
public class Player {
    // filed or method 
    
    // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž 
    public Player() {
        // ๋‚ด์šฉ 
    }
}

 

 

 

 

3.  @Id , @GeneratedValuee

  • @Id : ํ•„๋“œ ์œ„์— ์„ ์–ธํ•˜๋ฉฐ ์—”ํ‹ฐํ‹ฐ์˜ ๊ธฐ๋ณธ ํ‚ค(PK)๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 
  • @GeneratedValue : ๊ธฐ๋ณธ ํ‚ค์˜ ๊ฐ’์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

 

 

 

 

4.  @Column

  • ์—”ํ‹ฐํ‹ฐ์˜ ํ•„๋“œ์™€ DB ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ๊ฐ„ ๋งคํ•‘์„ ์ง€์ •ํ•œ๋‹ค. 
  • ์ด๋ฆ„, ๊ธธ์ด, null ํ—ˆ์šฉ ์—ฌ๋ถ€๋“ฑ์„ ์„ค์ • ํ•  ์ˆ˜ ์žˆ๋‹ค. 

โœ๏ธ ์†์„ฑ ์ข…๋ฅ˜ 

  1. name : DB ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ง€์ •, ๊ธฐ๋ณธ๊ฐ’์€ ํ•„๋“œ๋ช…
  2. length : ์ฃผ๋กœ String ํƒ€์ž… ํ•„๋“œ์— ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฌธ์ž์—ด ์ปฌ๋Ÿผ์˜ ๊ธธ์ด๋ฅผ ์ง€์ •
  3. nullable : true, false๋กœ ํ—ˆ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ค์ • 
  4. unique : true, false๋กœ ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ๊ณ ์œ ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋งค๋ฉฐ ์ค‘๋ณต ๊ฐ’์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ 
  5. columnDefinition : ์ปฌ๋Ÿผ์˜ ์ •์˜๋ฅผ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉ 
@Column(name = "your_column", length = 50, nullable = false)
private String yourField;

 

 

 

 

5.  @Enumerated

  • Enum ํƒ€์ž… ํ•„๋“œ๋ฅผ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 

โœ๏ธ ์†์„ฑ ์ข…๋ฅ˜

  1. EnumType.ORDINAL : Enum ์ƒ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ์ €์žฅ 
  2. EnumType.STRING : ์ƒ์ˆ˜์˜ ์ด๋ฆ„์„ ๋ฌธ์ž์—ด๋กœ ์ €์žฅ 
@Entity
public class Player {

    // Enum ํƒ€์ž… ํ•„๋“œ ๋งคํ•‘
    @Enumerated(EnumType.STRING)
    private YourEnumType yourEnumField;
}

 

 

 

 

6.  @Temporal

  • ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ํ•„๋“œ๋ฅผ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 
  • ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ DB์— ์–ด๋–ป๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊ฐ€์ ธ์˜ฌ์ง€ ์ง€์ •ํ•œ๋‹ค. 

โœ๏ธ ์†์„ฑ ์ข…๋ฅ˜

  1. TemporalType.DATE : ๋‚ ์งœ ์ •๋ณด๋งŒ ์ €์žฅ 
  2. TemporalType.TIME : ์‹œ๊ฐ„ ์ •๋ณด๋งŒ ์ €์žฅ
  3. TemporalType.TIMESTAMP : ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ์ €์žฅ
@Entity
public class YourEntity {

    // java.util.Date ํƒ€์ž…์˜ ํ•„๋“œ ๋งคํ•‘
    @Temporal(TemporalType.DATE)
    private Date dateField;
}

 

 

 

 

7.  ๊ด€๊ณ„ ๋งคํ•‘์„ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜

  • @OneToMany, @ManyToOne, @ManyToMany, @OneToOne
// ์ผ๋Œ€๋‹ค ๊ด€๊ณ„
@OneToMany(mappedBy = "product")
private List<Review> reviews;

// ๋‹ค๋Œ€์ผ ๊ด€๊ณ„
@ManyToOne
@JoinColumn(name = "category_id")
private Category category;

// ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„
@ManyToMany
@JoinTable(
    name = "product_tag",
    joinColumns = @JoinColumn(name = "product_id"),
    inverseJoinColumns = @JoinColumn(name = "tag_id")
)
private List<Tag> tags;

// ์ผ๋Œ€์ผ ๊ด€๊ณ„
@OneToOne
@JoinColumn(name = "detail_id")
private ProductDetail productDetail;