Search
Duplicate

์—”ํ„ฐํ‹ฐ

์—”ํ„ฐํ‹ฐ(Entity)

JPA ์—”ํ„ฐํ‹ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ์˜์†์„ฑ ๊ฐ์ฒด
@Entity ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์—”ํ„ฐํ‹ฐ๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„์ž(@Id)๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์ฃผ์š” ์–ด๋…ธํ…Œ์ด์…˜
โ€ข
์—”ํ„ฐํ‹ฐ ์˜ˆ์‹œ ์ฝ”๋“œ

์ฃผ์š” ์–ด๋…ธํ…Œ์ด์…˜

์–ด๋…ธํ…Œ์ด์…˜
์„ค๋ช…
@Entity
ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ JPA ์—”ํ„ฐํ‹ฐ๋กœ ์ง€์ •
@Table(name="table_name")
์—”ํ„ฐํ‹ฐ๊ฐ€ ๋งคํ•‘๋  ํ…Œ์ด๋ธ” ์ง€์ •
@Id
๊ธฐ๋ณธ ํ‚ค(PK) ํ•„๋“œ ์ง€์ •
@GeneratedValue (strategy=GenerationType.IDENTITY)
์ž๋™ ์ฆ๊ฐ€ํ•˜๋Š” PK ์„ค์ •
@Column (name="column_name", nullable=false, length=100)
ํŠน์ • ์ปฌ๋Ÿผ ๋งคํ•‘ ๋ฐ ์†์„ฑ ์„ค์ •
@ManyToOne
๋‹ค๋Œ€์ผ(N:1) ๊ด€๊ณ„ ์„ค์ •
@OneToMany (mappedBy="board")
์ผ๋Œ€๋‹ค(1:N) ๊ด€๊ณ„ ์„ค์ •
@JoinColumn (name="foreign_key")
์™ธ๋ž˜ ํ‚ค(FK) ๋งคํ•‘
@Enumerated (EnumType.STRING)
์—ด๊ฑฐํ˜•(Enum) ํƒ€์ž… ๋งคํ•‘
@Temporal (TemporalType.TIMESTAMP)
๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ํƒ€์ž… ๋งคํ•‘
@CreatedDate
์ƒ์„ฑ ์‹œ๊ฐ„ ์ž๋™ ์ €์žฅ(Auditing ๊ธฐ๋Šฅ ํ™œ์šฉ)
@LastModifiedDate
์ˆ˜์ • ์‹œ๊ฐ„ ์ž๋™ ์ €์žฅ(Auditing ๊ธฐ๋Šฅ ํ™œ์šฉ)
@Version
๋‚™๊ด€์  ๋ฝ(Optimistic Lock) ์ ์šฉ
@Transient
์˜์†์„ฑ ๊ด€๋ฆฌ ์ œ์™ธ(์ปฌ๋Ÿผ์œผ๋กœ ๋งคํ•‘๋˜์ง€ ์•Š์Œ)

์—”ํ„ฐํ‹ฐ ์˜ˆ์‹œ ์ฝ”๋“œ

Users ์—”ํ„ฐํ‹ฐ

import jakarta.persistence.*; import lombok.*; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import java.time.LocalDateTime; import java.util.List; @Entity @Table(name = "users") @Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder public class Users { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, length = 50) private String username; @Column(nullable = false, unique = true) private String email; @Column(nullable = false) private String password; @Enumerated(EnumType.STRING) @Column(nullable = false) private Role role; @CreatedDate @Column(updatable = false) private LocalDateTime createdAt; @LastModifiedDate private LocalDateTime updatedAt; @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) private List<Boards> boards; public enum Role { USER, ADMIN } }
Java
๋ณต์‚ฌ

Boards ์—”ํ„ฐํ‹ฐ

import jakarta.persistence.*; import lombok.*; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import java.time.LocalDateTime; @Entity @Table(name = "boards") @Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder public class Boards { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, length = 100) private String title; @Column(nullable = false, columnDefinition = "TEXT") private String content; @ManyToOne @JoinColumn(name = "user_id", nullable = false) private Users user; @CreatedDate @Column(updatable = false) private LocalDateTime createdAt; @LastModifiedDate private LocalDateTime updatedAt; }
Java
๋ณต์‚ฌ

์ฃผ์š” ํŠน์ง•

์–ด๋…ธํ…Œ์ด์…˜
์„ค๋ช…
@Entity
์—”ํ„ฐํ‹ฐ ํด๋ž˜์Šค๋กœ ์ง€์ •
@Table(name="ํ…Œ์ด๋ธ”๋ช…")
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘
@Id, @GeneratedValue (strategy = GenerationType.IDENTITY)
PK์™€ ์ž๋™ ์ฆ๊ฐ€ ์„ค์ •
@Column (nullable = false, unique = true, length = 50)
์ปฌ๋Ÿผ ์†์„ฑ ์ง€์ •
@Enumerated(EnumType.STRING)
์—ด๊ฑฐํ˜• ๊ฐ’ ์ €์žฅ
@CreatedDate, @LastModifiedDate
์ƒ์„ฑ ๋ฐ ์ˆ˜์ • ์‹œ๊ฐ„ ์ž๋™ ์ €์žฅ
@ManyToOne, @OneToMany
๊ด€๊ณ„ ์„ค์ • ๋ฐ ๋งคํ•‘