Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Lv.0
- jpa blog
- 배열
- 코테
- 데이터 베이스
- Join
- docker
- Spring Frame Work
- LV02
- CoffiesVol.02
- JPA
- 이것이 자바다
- LV0
- LV1
- 포트 폴리오
- 네트워크
- Til
- LV03
- 포트폴리오
- SQL
- 일정관리프로젝트
- LV01
- 디자인 패턴
- mysql
- LV.02
- 알고리즘
- Redis
- 연습문제
- 프로그래머스
- Java
Archives
- Today
- Total
코드 저장소.
Jpa - 엔티티 연관관계 본문
목차
1.JPA의 연관관계
2.1대1관계
3.1대다관계
4.다대다관계
1.JPA의 연관관계
JPA(Java Persistence API)에서 연관관계는 단방향과 양방향으로 설정할 수 있습니다. 연관관계는 크게 1대1,1대다,다대다의 세 가지 유형으로 나뉘며, 각각을 단방향과 양방향으로 구현할 수 있습니다.
2.1대1관계
단방향: 한쪽 엔티티가 다른 한쪽 엔티티를 참조합니다. 예를 들어, User가 UserProfile을 참조하지만 UserProfile은 User를 참조하지 않습니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "profile_id")
private UserProfile userProfile;
// getters and setters
}
@Entity
public class UserProfile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String address;
// No reference to User
// getters and setters
}
양방향: 양쪽 엔티티가 서로를 참조합니다. User가 UserProfile을 참조하고, UserProfile도 User를 참조합니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private UserProfile userProfile;
// getters and setters
}
@Entity
public class UserProfile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String address;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
// getters and setters
}
3.1대다 관계
단방향: 한쪽 엔티티가 여러 다른 엔티티를 참조합니다. 예를 들어, User가 여러 Order를 참조하지만 Order는 User를 참조하지 않습니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "user_id") // This creates the foreign key column in orders table
private List<Order> orders = new ArrayList<>();
// getters and setters
}
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String product;
// No reference to User
// getters and setters
}
양방향: 양쪽 엔티티가 서로를 참조합니다. User가 여러 Order를 참조하고, Order도 User를 참조합니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Order> orders = new ArrayList<>();
// getters and setters
}
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String product;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
// getters and setters
}
4.다대다관계
단방향: 한쪽 엔티티가 여러 다른 엔티티를 참조합니다. 예를 들어, Student가 여러 Course를 참조하지만 Course는 Student를 참조하지 않습니다.
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@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;
private String title;
// No reference to Student
// getters and setters
}
양방향: 양쪽 엔티티가 서로를 참조합니다. Student가 여러 Course를 참조하고, Course도 여러 Student를 참조합니다.
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@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;
private String title;
@ManyToMany(mappedBy = "courses")
private List<Student> students = new ArrayList<>();
// getters and setters
}
'웹개발 > Jpa' 카테고리의 다른 글
Jpa - 프록시 및 로딩전략 (0) | 2024.05.29 |
---|---|
Jpa - 값타입 (0) | 2024.05.28 |
Jpa - 영속성 컨텍스트 (0) | 2024.05.13 |
Jpa [엔티티 매핑] (0) | 2024.05.11 |
Jpa 란 무엇인가?? (0) | 2024.05.07 |