728x90

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

  • @Entity
    ์ด ํด๋ž˜์Šค๊ฐ€ JPA๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์ž„์„ ์„ ์–ธํ•จ.
    ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋จ.
  • @Table(name = "table_name") (์„ ํƒ)
    ์—”ํ‹ฐํ‹ฐ์™€ ๋งคํ•‘๋  ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ์ง€์ •. ์ƒ๋žตํ•˜๋ฉด ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ํ…Œ์ด๋ธ”๋กœ ์ž๋™ ๋งคํ•‘๋จ.
@Entity
@Table(name = "posts") // posts ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘
public class Post {
    ...
}

 

 


๐Ÿ“Œ 2. ๊ธฐ๋ณธ ํ‚ค ๋งคํ•‘

  • @Id
    ๊ธฐ๋ณธ ํ‚ค(primary key)๋ฅผ ์ง€์ •ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜. ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•จ!
  • @GeneratedValue(strategy = GenerationType.IDENTITY)
    ๊ธฐ๋ณธ ํ‚ค์˜ ์ž๋™ ์ƒ์„ฑ ์ „๋žต์„ ์ง€์ •ํ•จ. ๋Œ€ํ‘œ์ ์ธ ์ „๋žต:
    • IDENTITY: DB์—์„œ ์ž๋™ ์ฆ๊ฐ€ (MySQL์˜ auto_increment)
    • SEQUENCE: DB์˜ ์‹œํ€€์Šค ์‚ฌ์šฉ (Oracle ๋“ฑ)
    • AUTO: JPA๊ฐ€ ์ž๋™์œผ๋กœ ์ ์ ˆํ•œ ์ „๋žต ์„ ํƒ
    • TABLE: ํ‚ค ์ƒ์„ฑ์šฉ ๋ณ„๋„ ํ…Œ์ด๋ธ” ์‚ฌ์šฉ
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

 

 


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

  • @Column(name = "column_name", nullable = false, length = 100)
    • name: ์‹ค์ œ ์ปฌ๋Ÿผ ์ด๋ฆ„ ์ง€์ •
    • nullable: NOT NULL ์—ฌ๋ถ€
    • length: ๋ฌธ์ž ๊ธธ์ด ์ œํ•œ (๋ฌธ์ž์—ด์—๋งŒ ์ ์šฉ)
  • ์ƒ๋žต ์‹œ ํ•„๋“œ๋ช…์ด ๊ทธ๋Œ€๋กœ ์ปฌ๋Ÿผ๋ช…์œผ๋กœ ์‚ฌ์šฉ๋จ
@Column(name = "post_title", nullable = false, length = 100)
private String title;
  • ๊ธฐํƒ€ ์ปฌ๋Ÿผ ๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜
    • @Lob โ†’ ํฐ ํ…์ŠคํŠธ๋‚˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ €์žฅ (ex: TEXT, BLOB)
    • @Transient โ†’ DB ์ปฌ๋Ÿผ๊ณผ ๋ฌด๊ด€ํ•œ ํ•„๋“œ (์ €์žฅ๋˜์ง€ ์•Š์Œ)
    • @Temporal โ†’ ๋‚ ์งœ ํƒ€์ž… ์„ค์ • (Date/Calendar์— ์‚ฌ์šฉ๋จ โ†’ ๋Œ€๋ถ€๋ถ„ LocalDateTime์œผ๋กœ ๋Œ€์ฒด)

 

 


๐Ÿ“Œ 4. ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘

  • @ManyToOne : ๋‹ค๋Œ€์ผ ๊ด€๊ณ„ (N:1)
  • @OneToMany : ์ผ๋Œ€๋‹ค ๊ด€๊ณ„ (1:N)
  • @OneToOne : ์ผ๋Œ€์ผ ๊ด€๊ณ„ (1:1)
  • @ManyToMany : ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„ (N:N)
  • @JoinColumn(name = "foreign_key")
    ์™ธ๋ž˜ ํ‚ค ์ปฌ๋Ÿผ์„ ์ง€์ • (๊ธฐ๋ณธ๊ฐ’์€ ์ฐธ์กฐํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ๋ช… + _id)

โœ” ์˜ˆ์‹œ: ๋‹ค๋Œ€์ผ (N:1)

@Entity
public class Post {

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

    private String title;

    @ManyToOne
    @JoinColumn(name = "author_id") // ์™ธ๋ž˜ ํ‚ค ์ปฌ๋Ÿผ ์ด๋ฆ„
    private Author author;
}

 

โœ” ์˜ˆ์‹œ: ์ผ๋Œ€๋‹ค (1:N)

@Entity
public class Author {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @OneToMany(mappedBy = "author")
    private List<Post> posts = new ArrayList<>();
}

 

 


๐Ÿ“Ž ์š”์•ฝ

๊ตฌ๋ถ„ ์–ด๋…ธํ…Œ์ด์…˜ ์„ค๋ช…
์—”ํ‹ฐํ‹ฐ ์ง€์ • @Entity JPA๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค ์ง€์ •
ํ…Œ์ด๋ธ”๋ช… @Table ๋งคํ•‘๋  ํ…Œ์ด๋ธ” ์ด๋ฆ„ ์ง€์ •
๊ธฐ๋ณธํ‚ค @Id PK ์ง€์ •
ํ‚ค ์ƒ์„ฑ @GeneratedValue ํ‚ค ์ž๋™ ์ƒ์„ฑ ์ „๋žต
์ปฌ๋Ÿผ ๋งคํ•‘ @Column ์ปฌ๋Ÿผ ์†์„ฑ ์ง€์ •
๋Œ€์šฉ๋Ÿ‰ ์ปฌ๋Ÿผ @Lob TEXT/BLOB ๊ฐ™์€ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ €์žฅ
์—ฐ๊ด€๊ด€๊ณ„ @ManyToOne, @OneToMany ๋“ฑ ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ๊ด€๊ณ„ ์ง€์ •
์™ธ๋ž˜ํ‚ค @JoinColumn ์™ธ๋ž˜ํ‚ค ์ปฌ๋Ÿผ ์ด๋ฆ„ ์ง€์ •
์ œ์™ธ ํ•„๋“œ @Transient DB ์ €์žฅ ์ œ์™ธ ํ•„๋“œ

 

 


 

 

728x90