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