Search

μ—”ν„°ν‹°

μ—”ν„°ν‹°(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
관계 μ„€μ • 및 맀핑