
JPA (Java Persistence API)는 객체-관계 매핑(ORM) 프레임워크로, 엔티티 간의 관계를 매핑할 수 있습니다. JPA에서 지원하는 주요 관계 매핑 유형과 그 예시는 다음과 같습니다.
1. @ManyToOne 관계
@ManyToOne 관계는 다수의 엔티티가 하나의 엔티티를 참조하는 관계입니다. 예를 들어, 다수의 게시물(Board)이 하나의 사용자(User)를 참조할 때 사용됩니다.
속성:
• cascade: 연관된 엔티티에 수행되는 작업을 지정합니다.
• fetch: 연관된 엔티티를 언제 로드할지를 지정합니다.
FetchType.EAGER(기본값)은 즉시 로드, FetchType.LAZY는 필요할 때 로드합니다.
• optional: 연관된 엔티티가 필수인지 여부를 지정합니다.
예시:
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "board")
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "board_id")
private Long boardId;
@Column(name = "title", nullable = false, length = 100)
private String title;
@Column(name = "content", nullable = false, columnDefinition = "TEXT")
private String content;
@CreationTimestamp
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@Column(name = "is_deleted", nullable = false)
private boolean isDeleted;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "create_user_id", referencedColumnName = "user_id")
private User createUser;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "update_user_id", referencedColumnName = "user_id")
private User updateUser;
}
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column(name = "login_id", nullable = false, unique = true, length = 50)
private String loginId;
@Column(name = "password", nullable = false, length = 255)
private String password;
@Column(name = "nickname", nullable = false, length = 50)
private String nickname;
@CreationTimestamp
@Column(name = "signup_at", nullable = false, updatable = false)
private LocalDateTime signupAt;
@Column(name = "last_login_at")
private LocalDateTime lastLoginAt;
@Column(name = "is_active", nullable = false)
private Boolean isActive;
@Column(name = "is_withdrawn", nullable = false)
private Boolean isWithdrawn;
@Column(name = "withdrawn_at")
private LocalDateTime withdrawnAt;
}
2. @OneToMany 관계
@OneToMany 관계는 하나의 엔티티가 다수의 엔티티를 참조하는 관계입니다. 예를 들어, 하나의 사용자(User)가 여러 게시물(Board)을 참조할 때 사용됩니다.
속성:
• cascade: 연관된 엔티티에 수행되는 작업을 지정합니다.
• fetch: 연관된 엔티티를 언제 로드할지를 지정합니다.
FetchType.EAGER(기본값)은 즉시 로드, FetchType.LAZY는 필요할 때 로드합니다.
• mappedBy: 양방향 관계에서 반대쪽 엔티티의 필드명을 지정합니다.
• orphanRemoval: 부모 엔티티에서 제거된 자식 엔티티를 데이터베이스에서도 자동으로 삭제할지를 지정합니다. true로 설정하면 고아 객체가 제거됩니다.
예시:
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column(name = "login_id", nullable = false, unique = true, length = 50)
private String loginId;
@Column(name = "password", nullable = false, length = 255)
private String password;
@Column(name = "nickname", nullable = false, length = 50)
private String nickname;
@CreationTimestamp
@Column(name = "signup_at", nullable = false, updatable = false)
private LocalDateTime signupAt;
@Column(name = "last_login_at")
private LocalDateTime lastLoginAt;
@Column(name = "is_active", nullable = false)
private Boolean isActive;
@Column(name = "is_withdrawn", nullable = false)
private Boolean isWithdrawn;
@Column(name = "withdrawn_at")
private LocalDateTime withdrawnAt;
@OneToMany(mappedBy = "createUser", fetch = FetchType.LAZY)
private List<Board> createdBoards = new ArrayList<>();
@OneToMany(mappedBy = "updateUser", fetch = FetchType.LAZY)
private List<Board> updatedBoards = new ArrayList<>();
}
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "board")
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "board_id")
private Long boardId;
@Column(name = "title", nullable = false, length = 100)
private String title;
@Column(name = "content", nullable = false, columnDefinition = "TEXT")
private String content;
@CreationTimestamp
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@Column(name = "is_deleted", nullable = false)
private boolean isDeleted;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "create_user_id", referencedColumnName = "user_id")
private User createUser;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "update_user_id", referencedColumnName = "user_id")
private User updateUser;
}
3. @OneToOne 관계
@OneToOne 관계는 하나의 엔티티가 하나의 다른 엔티티를 참조하는 관계입니다. 예를 들어, 하나의 사용자(User)와 하나의 프로필(Profile)이 연결될 때 사용됩니다.
속성:
• cascade: 연관된 엔티티에 수행되는 작업을 지정합니다. 예를 들어, CascadeType.ALL은 모든 작업(저장, 삭제, 병합 등)을 연관된 엔티티에 전달합니다.
• fetch: 연관된 엔티티를 언제 로드할지를 지정합니다. FetchType.EAGER(기본값)은 즉시 로드, FetchType.LAZY는 필요할 때 로드합니다.
• mappedBy: 양방향 관계에서 반대쪽 엔티티의 필드명을 지정합니다.
• optional: 연관된 엔티티가 필수인지 여부를 지정합니다. true(기본값)는 필수 아님, false는 필수입니다.
예시:
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column(name = "login_id", nullable = false, unique = true, length = 50)
private String loginId;
@Column(name = "password", nullable = false, length = 255)
private String password;
@Column(name = "nickname", nullable = false, length = 50)
private String nickname;
@CreationTimestamp
@Column(name = "signup_at", nullable = false, updatable = false)
private LocalDateTime signupAt;
@Column(name = "last_login_at")
private LocalDateTime lastLoginAt;
@Column(name = "is_active", nullable = false)
private Boolean isActive;
@Column(name = "is_withdrawn", nullable = false)
private Boolean isWithdrawn;
@Column(name = "withdrawn_at")
private LocalDateTime withdrawnAt;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private UserProfile profile;
}
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user_profile")
public class UserProfile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "profile_id")
private Long profileId;
@Column(name = "bio")
private String bio;
@Column(name = "profile_picture_url")
private String profilePictureUrl;
@OneToOne
@JoinColumn(name = "user_id", referencedColumnName = "user_id")
private User user;
}
4. @ManyToMany 관계
@ManyToMany 관계는 다수의 엔티티가 다수의 다른 엔티티를 참조하는 관계입니다. 예를 들어, 다수의 사용자(User)가 다수의 그룹(Group)에 속할 때 사용됩니다.
속성:
• cascade: 연관된 엔티티에 수행되는 작업을 지정합니다.
• fetch: 연관된 엔티티를 언제 로드할지를 지정합니다.
• mappedBy: 양방향 관계에서 반대쪽 엔티티의 필드명을 지정합니다.
추가적인 속성:
• @JoinColumn: 외래 키 컬럼의 이름을 지정합니다. name 속성을 통해 외래 키 컬럼의 이름을 정의할 수 있습니다.
• @JoinTable: 다대다 관계에서 사용되며, 중간 테이블을 지정합니다. name, joinColumns, inverseJoinColumns 속성을 사용하여 중간 테이블과 각 엔티티의 외래 키를 정의합니다.
예시:
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column(name = "login_id", nullable = false, unique = true, length = 50)
private String loginId;
@Column(name = "password", nullable = false, length = 255)
private String password;
@Column(name = "nickname", nullable = false, length = 50)
private String nickname;
@CreationTimestamp
@Column(name = "signup_at", nullable = false, updatable = false)
private LocalDateTime signupAt;
@Column(name = "last_login_at")
private LocalDateTime lastLoginAt;
@Column(name = "is_active", nullable = false)
private Boolean isActive;
@Column(name = "is_withdrawn", nullable = false)
private Boolean isWithdrawn;
@Column(name = "withdrawn_at")
private LocalDateTime withdrawnAt;
@ManyToMany
@JoinTable(
name = "user_group",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "group_id”)
)
private List groups = new ArrayList<>();
}
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = “group”)
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "group_id")
private Long groupId;
@Column(name = "name", nullable = false)
private String name;
@ManyToMany(mappedBy = "groups")
private List<User> users = new ArrayList<>();
}
예시에서 사용된 각 속성에 대한 설명:
1. cascade: 연관된 엔티티에 대한 작업을 전파합니다.
• CascadeType.ALL: 모든 작업(저장, 삭제, 병합, 제거 등)을 연관된 엔티티에 전달합니다.
• CascadeType.PERSIST: 저장 작업을 전파합니다.
• CascadeType.MERGE: 병합 작업을 전파합니다.
• CascadeType.REMOVE: 제거 작업을 전파합니다.
• CascadeType.REFRESH: 새로 고침 작업을 전파합니다.
• CascadeType.DETACH: 분리 작업을 전파합니다.
2. fetch: 연관된 엔티티를 언제 로드할지를 결정합니다.
• FetchType.EAGER: 즉시 로드합니다.
• FetchType.LAZY: 실제로 접근할 때 로드합니다.
3. mappedBy: 양방향 관계에서 반대쪽 엔티티의 필드명을 지정합니다.
4. optional: 연관된 엔티티가 필수인지 여부를 결정합니다.
5. orphanRemoval: 부모 엔티티에서 제거된 자식 엔티티를 데이터베이스에서도 자동으로 삭제할지를 결정합니다.
6. @JoinColumn: 외래 키 컬럼을 지정합니다.
7. @JoinTable: 다대다 관계에서 중간 테이블을 지정합니다. name 속성은 중간 테이블의 이름을, joinColumns와 inverseJoinColumns 속성은 각각의 엔티티에 대한 외래 키를 정의합니다.
이러한 속성을 통해 JPA에서 엔티티 간의 관계를 다양한 방식으로 유연하게 매핑할 수 있습니다.
'Programming > Java, Kotlin' 카테고리의 다른 글
[Java] 얕은 복사, 깊은 복사 차이, 예시 (0) | 2024.06.22 |
---|---|
[Java] 커스텀 불변 클래스란? Immutable Class 특징, 예, 이점 (0) | 2024.06.22 |
[Java] ThreadPoolExecutor란? 주요 기능, 사용예시, 장점, 동작 방식 (0) | 2024.06.22 |
[Java] 가비지 컬렉션이란? (가비지가 객체를 수집하는 방법, 사용하는 알고리즘) (0) | 2024.06.22 |
[Java] JVM 이란? 자바 메모리(메모리 각 영역에 객체, 메소드 및 변수를 저장하는 법) (0) | 2024.06.22 |

JPA (Java Persistence API)는 객체-관계 매핑(ORM) 프레임워크로, 엔티티 간의 관계를 매핑할 수 있습니다. JPA에서 지원하는 주요 관계 매핑 유형과 그 예시는 다음과 같습니다.
1. @ManyToOne 관계
@ManyToOne 관계는 다수의 엔티티가 하나의 엔티티를 참조하는 관계입니다. 예를 들어, 다수의 게시물(Board)이 하나의 사용자(User)를 참조할 때 사용됩니다.
속성:
• cascade: 연관된 엔티티에 수행되는 작업을 지정합니다.
• fetch: 연관된 엔티티를 언제 로드할지를 지정합니다.
FetchType.EAGER(기본값)은 즉시 로드, FetchType.LAZY는 필요할 때 로드합니다.
• optional: 연관된 엔티티가 필수인지 여부를 지정합니다.
예시:
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "board")
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "board_id")
private Long boardId;
@Column(name = "title", nullable = false, length = 100)
private String title;
@Column(name = "content", nullable = false, columnDefinition = "TEXT")
private String content;
@CreationTimestamp
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@Column(name = "is_deleted", nullable = false)
private boolean isDeleted;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "create_user_id", referencedColumnName = "user_id")
private User createUser;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "update_user_id", referencedColumnName = "user_id")
private User updateUser;
}
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column(name = "login_id", nullable = false, unique = true, length = 50)
private String loginId;
@Column(name = "password", nullable = false, length = 255)
private String password;
@Column(name = "nickname", nullable = false, length = 50)
private String nickname;
@CreationTimestamp
@Column(name = "signup_at", nullable = false, updatable = false)
private LocalDateTime signupAt;
@Column(name = "last_login_at")
private LocalDateTime lastLoginAt;
@Column(name = "is_active", nullable = false)
private Boolean isActive;
@Column(name = "is_withdrawn", nullable = false)
private Boolean isWithdrawn;
@Column(name = "withdrawn_at")
private LocalDateTime withdrawnAt;
}
2. @OneToMany 관계
@OneToMany 관계는 하나의 엔티티가 다수의 엔티티를 참조하는 관계입니다. 예를 들어, 하나의 사용자(User)가 여러 게시물(Board)을 참조할 때 사용됩니다.
속성:
• cascade: 연관된 엔티티에 수행되는 작업을 지정합니다.
• fetch: 연관된 엔티티를 언제 로드할지를 지정합니다.
FetchType.EAGER(기본값)은 즉시 로드, FetchType.LAZY는 필요할 때 로드합니다.
• mappedBy: 양방향 관계에서 반대쪽 엔티티의 필드명을 지정합니다.
• orphanRemoval: 부모 엔티티에서 제거된 자식 엔티티를 데이터베이스에서도 자동으로 삭제할지를 지정합니다. true로 설정하면 고아 객체가 제거됩니다.
예시:
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column(name = "login_id", nullable = false, unique = true, length = 50)
private String loginId;
@Column(name = "password", nullable = false, length = 255)
private String password;
@Column(name = "nickname", nullable = false, length = 50)
private String nickname;
@CreationTimestamp
@Column(name = "signup_at", nullable = false, updatable = false)
private LocalDateTime signupAt;
@Column(name = "last_login_at")
private LocalDateTime lastLoginAt;
@Column(name = "is_active", nullable = false)
private Boolean isActive;
@Column(name = "is_withdrawn", nullable = false)
private Boolean isWithdrawn;
@Column(name = "withdrawn_at")
private LocalDateTime withdrawnAt;
@OneToMany(mappedBy = "createUser", fetch = FetchType.LAZY)
private List<Board> createdBoards = new ArrayList<>();
@OneToMany(mappedBy = "updateUser", fetch = FetchType.LAZY)
private List<Board> updatedBoards = new ArrayList<>();
}
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "board")
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "board_id")
private Long boardId;
@Column(name = "title", nullable = false, length = 100)
private String title;
@Column(name = "content", nullable = false, columnDefinition = "TEXT")
private String content;
@CreationTimestamp
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@Column(name = "is_deleted", nullable = false)
private boolean isDeleted;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "create_user_id", referencedColumnName = "user_id")
private User createUser;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "update_user_id", referencedColumnName = "user_id")
private User updateUser;
}
3. @OneToOne 관계
@OneToOne 관계는 하나의 엔티티가 하나의 다른 엔티티를 참조하는 관계입니다. 예를 들어, 하나의 사용자(User)와 하나의 프로필(Profile)이 연결될 때 사용됩니다.
속성:
• cascade: 연관된 엔티티에 수행되는 작업을 지정합니다. 예를 들어, CascadeType.ALL은 모든 작업(저장, 삭제, 병합 등)을 연관된 엔티티에 전달합니다.
• fetch: 연관된 엔티티를 언제 로드할지를 지정합니다. FetchType.EAGER(기본값)은 즉시 로드, FetchType.LAZY는 필요할 때 로드합니다.
• mappedBy: 양방향 관계에서 반대쪽 엔티티의 필드명을 지정합니다.
• optional: 연관된 엔티티가 필수인지 여부를 지정합니다. true(기본값)는 필수 아님, false는 필수입니다.
예시:
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column(name = "login_id", nullable = false, unique = true, length = 50)
private String loginId;
@Column(name = "password", nullable = false, length = 255)
private String password;
@Column(name = "nickname", nullable = false, length = 50)
private String nickname;
@CreationTimestamp
@Column(name = "signup_at", nullable = false, updatable = false)
private LocalDateTime signupAt;
@Column(name = "last_login_at")
private LocalDateTime lastLoginAt;
@Column(name = "is_active", nullable = false)
private Boolean isActive;
@Column(name = "is_withdrawn", nullable = false)
private Boolean isWithdrawn;
@Column(name = "withdrawn_at")
private LocalDateTime withdrawnAt;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private UserProfile profile;
}
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user_profile")
public class UserProfile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "profile_id")
private Long profileId;
@Column(name = "bio")
private String bio;
@Column(name = "profile_picture_url")
private String profilePictureUrl;
@OneToOne
@JoinColumn(name = "user_id", referencedColumnName = "user_id")
private User user;
}
4. @ManyToMany 관계
@ManyToMany 관계는 다수의 엔티티가 다수의 다른 엔티티를 참조하는 관계입니다. 예를 들어, 다수의 사용자(User)가 다수의 그룹(Group)에 속할 때 사용됩니다.
속성:
• cascade: 연관된 엔티티에 수행되는 작업을 지정합니다.
• fetch: 연관된 엔티티를 언제 로드할지를 지정합니다.
• mappedBy: 양방향 관계에서 반대쪽 엔티티의 필드명을 지정합니다.
추가적인 속성:
• @JoinColumn: 외래 키 컬럼의 이름을 지정합니다. name 속성을 통해 외래 키 컬럼의 이름을 정의할 수 있습니다.
• @JoinTable: 다대다 관계에서 사용되며, 중간 테이블을 지정합니다. name, joinColumns, inverseJoinColumns 속성을 사용하여 중간 테이블과 각 엔티티의 외래 키를 정의합니다.
예시:
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column(name = "login_id", nullable = false, unique = true, length = 50)
private String loginId;
@Column(name = "password", nullable = false, length = 255)
private String password;
@Column(name = "nickname", nullable = false, length = 50)
private String nickname;
@CreationTimestamp
@Column(name = "signup_at", nullable = false, updatable = false)
private LocalDateTime signupAt;
@Column(name = "last_login_at")
private LocalDateTime lastLoginAt;
@Column(name = "is_active", nullable = false)
private Boolean isActive;
@Column(name = "is_withdrawn", nullable = false)
private Boolean isWithdrawn;
@Column(name = "withdrawn_at")
private LocalDateTime withdrawnAt;
@ManyToMany
@JoinTable(
name = "user_group",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "group_id”)
)
private List groups = new ArrayList<>();
}
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = “group”)
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "group_id")
private Long groupId;
@Column(name = "name", nullable = false)
private String name;
@ManyToMany(mappedBy = "groups")
private List<User> users = new ArrayList<>();
}
예시에서 사용된 각 속성에 대한 설명:
1. cascade: 연관된 엔티티에 대한 작업을 전파합니다.
• CascadeType.ALL: 모든 작업(저장, 삭제, 병합, 제거 등)을 연관된 엔티티에 전달합니다.
• CascadeType.PERSIST: 저장 작업을 전파합니다.
• CascadeType.MERGE: 병합 작업을 전파합니다.
• CascadeType.REMOVE: 제거 작업을 전파합니다.
• CascadeType.REFRESH: 새로 고침 작업을 전파합니다.
• CascadeType.DETACH: 분리 작업을 전파합니다.
2. fetch: 연관된 엔티티를 언제 로드할지를 결정합니다.
• FetchType.EAGER: 즉시 로드합니다.
• FetchType.LAZY: 실제로 접근할 때 로드합니다.
3. mappedBy: 양방향 관계에서 반대쪽 엔티티의 필드명을 지정합니다.
4. optional: 연관된 엔티티가 필수인지 여부를 결정합니다.
5. orphanRemoval: 부모 엔티티에서 제거된 자식 엔티티를 데이터베이스에서도 자동으로 삭제할지를 결정합니다.
6. @JoinColumn: 외래 키 컬럼을 지정합니다.
7. @JoinTable: 다대다 관계에서 중간 테이블을 지정합니다. name 속성은 중간 테이블의 이름을, joinColumns와 inverseJoinColumns 속성은 각각의 엔티티에 대한 외래 키를 정의합니다.
이러한 속성을 통해 JPA에서 엔티티 간의 관계를 다양한 방식으로 유연하게 매핑할 수 있습니다.
'Programming > Java, Kotlin' 카테고리의 다른 글
[Java] 얕은 복사, 깊은 복사 차이, 예시 (0) | 2024.06.22 |
---|---|
[Java] 커스텀 불변 클래스란? Immutable Class 특징, 예, 이점 (0) | 2024.06.22 |
[Java] ThreadPoolExecutor란? 주요 기능, 사용예시, 장점, 동작 방식 (0) | 2024.06.22 |
[Java] 가비지 컬렉션이란? (가비지가 객체를 수집하는 방법, 사용하는 알고리즘) (0) | 2024.06.22 |
[Java] JVM 이란? 자바 메모리(메모리 각 영역에 객체, 메소드 및 변수를 저장하는 법) (0) | 2024.06.22 |