JPA Entity
JPA Entity에 대해 알아봅시다!
안녕하세요~ F4의 프린스초이입니다. 이번 파이널 프로젝트에서 JPA를 사용하게 되면서 Entity라는 개념을 접하게 되었는데요. ERD로 작성한 테이블을 Entity 클래스를 통해 매핑한다는 사실을 알게 되었고, 개념과 간단한 예시를 통해 Entity에 대해 학습한 내용을 정리하고 공유하기 위해서 글을 작성하게 되었습니다. 부족한 부분이 있거나 이해가 가지 않는 부분이 있으시다면! 말씀해주시면 감사하겠습니다 😉
📌Entity란?
Entity는 DB테이블에 저장되는 Column들을 필드로 가지는 객체입니다. Entity와 DB테이블은 일대일로 대응하는데요. 테이블에 가지지 않는 컬럼을 Entity의 필드로 가져가면 안됩니다. 다음은 DB의 students라는 테이블에 id, firstName, lastName, age이라는 Column들을 가지고 있다고 했을 때 생성한 Entity 클래스입니다.
📌예시
+------------------+
| students |
+------------------+
| id (PK) |
| first_name |
| last_name |
| age |
+------------------+
@Entity
@Table(name = "students")
public class Student {
@Id
private Long id;
private String firstName;
private String lastName;
private int age;
}
📌자주 사용되는 어노테이션
위의 예시에는 JPA Entity임을 나타내는 어노테이션인 @Entity, 테이블의 이름을 “students”로 지정하겠다는 어노테이션인 @Table, Entity의 PK 필드를 나타내는 어노테이션인 @Id가 달려있지만, 이외에도 Entity 클래스에 자주 사용되는 JPA 어노테이션과 예시입니다.
- @GeneratedValue : PK 값의 생성을 어떤 방식으로 할 것인지 전략을 설정
- @Column : 컬럼 이름을 지정
- @OneToMany : 1:N 관계를 지정
- @ManyToOne : N:1 관계를 지정
- @ManyToMany : N:N 관계를 지정
- @JoinColumn : 관계형 데이터베이스에서 조인 컬럼을 정의
📌예시
+------------------+
| students |
+------------------+
| id (PK) |
| first_name |
| last_name |
| age |
| department_id (FK)|
+------------------+
+------------------+
| courses |
+------------------+
| id (PK) |
| course_name |
| student_id (FK) |
+------------------+
+------------------+
| departments |
+------------------+
| id (PK) |
| department_name |
+------------------+
+------------------+
| subjects |
+------------------+
| id (PK) |
| subject_name |
+------------------+
+------------------+
| student_subject |
+------------------+
| student_id (FK) |
| subject_id (FK) |
+------------------+
@Entity
@Table(name = "students")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //자동 증가
private Long id;
@Column(name = "first_name") //first_name이라는 컬럼 이름 지정
private String firstName;
@Column(name = "last_name") //last_name이라는 컬럼 이름 지정
private String lastName;
private int age;
@OneToMany(mappedBy = "student") //Student(1):cources(N)
private List<Course> courses;
@ManyToOne //Student(N):department(1)
@JoinColumn(name = "department_id") //department 필드가 Department 엔티티의 department_id과 매핑됨
private Department department;
@ManyToMany //Student(N):Subject(N)
@JoinTable( //student_subject 테이블을 중간 테이블로 사용하여 관계를 설정
name = "student_subject",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "subject_id")
)
private List<Subject> subjects;
}
📌정리
쉽게 정리하자면 Entity는 DB 테이블과 매핑되는 클래스라고 알고 계시면 좋을 것 같습니다. 앞으로도 프로젝트를 진행하면서 학습한 부분을 포스팅 할 예정이니 관심 있게 지켜봐주셨으면 좋겠습니다! 저의 글을 읽어주셔서 감사합니다. 또 만나요😉
📌참고
https://code-lab1.tistory.com/201