1:1 관계
JPA(Java Persistence API)에서 Entity의 1:1 관계는 두 개의 Entity가 서로 1:1로 연결되는 관계를 의미한다. 즉, 한 Entity는 다른 Entity와 정확히 하나의 인스턴스만 연결될 수 있다. 이 관계는 주로 두 Entity 간의 강력한 연관성을 나타내며, 예를 들어, 사용자(User)와 사용자 프로필(Profile) 간의 관계가 이에 해당할 수 있다.
주 테이블과 종속 테이블:
@MapsId 어노테이션을 사용하여 주 테이블의 ID를 종속 테이블의 ID로 매핑할 수 있다.어노테이션 사용:
@OneToOne: 1:1 관계를 정의한다.@JoinColumn: 외래 키를 정의한다.@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private Profile profile;
// getters and setters
}
@Entity
public class Profile {
@Id
private Long id;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
// getters and setters
}
CascadeType.ALL을 사용하면 모든 작업이 전파된다.1:N
JPA(Java Persistence API)에서 Entity의 1:N 관계는 한 Entity가 여러 개의 다른 Entity와 연결되는 관계를 의미한다. 즉, 하나의 부모 Entity는 여러 자식 Entity를 가질 수 있지만, 각 자식 Entity는 하나의 부모 Entity에만 속한다. 이 관계는 주로 주체와 그에 소속된 여러 객체 간의 관계를 나타내며, 예를 들어, 하나의 사용자(User)가 여러 게시물(Post)을 작성할 수 있는 경우가 이에 해당한다.
주 테이블과 자식 테이블:
어노테이션 사용:
@OneToMany: 1:N 관계를 정의한다.@ManyToOne: N:1 관계를 정의하여 자식 Entity가 부모 Entity를 참조한다.@JoinColumn: 외래 키를 정의한다.@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Post> posts = new ArrayList<>();
// getters and setters
}
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
// getters and setters
}
CascadeType.ALL을 사용하면 모든 작업이 전파된다.JPA에서 1:N 관계는 부모 Entity와 여러 자식 Entity 간의 관계를 모델링하는 데 유용하며, 적절한 어노테이션과 매핑을 통해 효율적으로 관리할 수 있다. 양방향 또는 단방향 관계를 필요에 따라 설정할 수 있으며, Cascade 옵션을 통해 관계의 일관성을 유지할 수 있다.
N:1
JPA(Java Persistence API)에서 Entity의 N:1 관계는 여러 개의 자식 Entity가 하나의 부모 Entity에 연결되는 관계를 의미한다. 즉, 여러 자식 Entity가 동일한 부모 Entity를 참조할 수 있지만, 각 자식 Entity는 하나의 부모 Entity에만 속한다. 이 관계는 주로 다수의 객체가 하나의 주체를 공유하는 상황에서 사용된다. 예를 들어, 여러 게시물(Post)이 하나의 카테고리(Category)에 속할 수 있는 경우가 이에 해당한다.
자식 테이블과 주 테이블:
어노테이션 사용:
@ManyToOne: N:1 관계를 정의한다. 여러 자식 Entity가 하나의 부모 Entity를 참조한다.@JoinColumn: 외래 키를 정의한다.@Entity
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "category")
private List<Post> posts = new ArrayList<>();
// getters and setters
}
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "category_id")
private Category category;
// getters and setters
}
JPA에서 N:1 관계는 여러 자식 Entity가 동일한 부모 Entity를 참조하는 구조를 모델링하는 데 유용하다. 적절한 어노테이션과 매핑을 통해 이 관계를 효율적으로 관리할 수 있으며, 필요에 따라 양방향 또는 단방향 관계를 설정할 수 있다. 이를 통해 데이터베이스의 무결성을 유지하고, 객체 간의 관계를 효과적으로 표현할 수 있다.
N:M
JPA(Java Persistence API)에서 Entity의 N:M 관계는 여러 개의 자식 Entity가 여러 개의 부모 Entity와 연결되는 관계를 의미한다. 즉, 하나의 Entity가 여러 다른 Entity와 연관될 수 있으며, 반대로 다른 Entity도 여러 개의 같은 Entity와 연관될 수 있다. 이 관계는 주로 다대다의 관계를 표현할 때 사용되며, 예를 들어, 학생(Student)과 과목(Course) 간의 관계가 이에 해당한다. 한 학생이 여러 과목을 수강할 수 있고, 동시에 여러 학생이 하나의 과목을 수강할 수 있다.
N:M 관계를 설정하기 위해서는 중간 테이블이 필요한다. JPA에서는 이 중간 테이블을 자동으로 생성하거나 직접 정의할 수 있다.
중간 테이블 생성: 여러 개의 부모 Entity와 자식 Entity 간의 관계를 나타내기 위해 중간 테이블을 사용한다.
어노테이션 사용:
@ManyToMany: N:M 관계를 정의한다.@JoinTable: 중간 테이블의 이름과 외래 키를 정의한다.@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List<Course> courses = new ArrayList<>();
// getters and setters
}
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany(mappedBy = "courses")
private List<Student> students = new ArrayList<>();
// getters and setters
}
JPA에서 N:M 관계는 여러 개의 자식 Entity와 여러 개의 부모 Entity 간의 복잡한 관계를 표현하는 데 유용한다. 적절한 어노테이션과 중간 테이블 설정을 통해 이 관계를 효과적으로 관리할 수 있으며, 데이터베이스의 무결성을 유지하면서 객체 간의 관계를 명확히 할 수 있다.