JPA 란?
ORM 기술 표즌으로 사용하는 인터페이스 모음
자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
인터페이스이기 때문에 Hibernate, OpenJPA 등이 JPA 를 구현을 해야한다.
Entity
JPA 는 기본적으로 entity 가 존재하고 repository 가 존재한다.
그중 entity 에서의 어노테이션에 대해 알아보자.
@Entity : 나 entity 이야 라고 선언한것
@Table : 테이블 이름을 지정할수 있음, 지정 없을때는 클래스명이 테이블명이 됨.
@Index : 테이블에서 데이터 검색 작업의 속도를 향상시키는 데이터 구조.
@Table(indexes = {
@Index(columnList = "content"),
@Index(columnList = "createdAt"),
@Index(columnList = "createdBy")
})
@Id : 테이블의 기본키 (PK)
@GeneratedValue : 자동생성 ( db가 생성 )
strategy = GenerationType.IDENTITY : 기본키 생성을 데이터베이스에 위임한다. 만약 auto_increment 했을경우
이외 SEQUENCE, TABLE, AUTO 가 있지만 보통은 IDENTITY를 많이 쓴다.
@Column : column 맵핑할때 쓴다.
@Column(nullable = false, length = 500) //null 허용 / 길이 500 까지.
속성 설명 기본값
name | Mapping할 Column의 이름을 지정. | 객체 Field 이름 |
insertable | Entity 저장 시 해당 Field도 저장, false로 읽기 전용 설정 가능. |
true |
updatable | Entity 수정 시 해당 Field도 수정, false로 읽기 전용 설정 가능. |
true |
table | 하나의 Entity설정에서 두 개이상 Table에 매핑할 때 사용 | 현재 Class가 매핑된 Table |
nullable(DDL) | true/false로 null 허용 여부 설정 | true |
unique(DDL) | true/false로 Unique 제약 조건 설정 | |
length(DDL) | Column 속성 길이 설정 | 255 |
columnDefinition(DDL) | DB Column 정보를 직접 설정 | Java Type과 설정 DB 방언으로, 적절한 Column Type 생성 |
precision, scale(DDL) | BigDecimal, BigInteger Type에서 사용, precision은 소수점 포함 전체 자릿수, scale은 소수 자릿수, double, float Type에는 적용되지 않음. 아주 큰 숫자나 정밀한 소수를 다룰때 사용. |
precision=19, scale=2 |
@ManyToOne : 단방향, 양방향 연관관계 나타냄. 참조하는 객체들은 하나 지만, 현재 객체들은 여러개
@OneToMany : 단방향, 양방향 연관관계 나타냄. 참조하는 객체들이 여러개지만 현재 객체들은 하나
@JoinColumn(name=" ") : column 을 join 한다.
optional : false 로 설정할시 해당 객체에 null 허용
mappedBy = "" : 해당객체에 연관되어 있다는것을 알려준다.
cascade = CascadeType.ALL : 해당 객체가 바뀌면 참조하는 객체에 내용도 같이 바뀐다.
예시
Article.java
@OneToMany(mappedBy = "article", cascade = CascadeType.ALL)
private final Set<ArticleComment> articleComments = new LinkedHashSet<>(); //게시글이 하나지만 댓글은
여러개이므로 HashSet 을 이용
Article_comment.java
@ManyToOne(optional = false) //객체에 null 허용
private Article article;
이런식으로 쓰게 된다.
@EntityListeners(AuditingEntityListener.class) : 밑에 있는 어노테이션을 쓸려면 @Entity 위에 선언해야함.
ㄴ @EntityListeners : Entity를 DB에 적용하기 이전, 이후에 커스텀 콜백을 요청할 수 있는 어노테이션
ㄴ AuditingEntityListener : Entity 영속성 및 업데이트에 대한 Auditing 정보를 캡처하는 JPA Entity Listener
@CreatedDate : 생성된 시간 정보 자동으로 저장
@LastModifiedDate : 수정된 시간 정보 자동으로 저장
@CreatedBy : 작성자를 자동으로 저장
@LastModifiedBy : 수정자를 자동으로 저장
또한 위에 있는 내용을 쓸려면,
@Configuration
@EnableJpaAuditing
public class JpaConfig {
@Bean
public AuditorAware<String> autdiAware(){
return () -> Optional.of("uno"); // TODO: 스프링 시큐리티로 인증 기능을 붙이게 될떄, 수정하자.
}
}
JpaConfig 라는 파일을 만들고 @EnableJpaAuditing 어노테이션을 붙여야 한다.
'Spring' 카테고리의 다른 글
Querydsl (2) | 2023.05.19 |
---|---|
Rest Repositories (0) | 2023.05.19 |
DTO, Entity, Response 연관관계 (0) | 2023.05.16 |
JUnit5, AssertJ (0) | 2023.05.11 |
TDD, BDD 개발 방법 (0) | 2023.05.02 |