본문 바로가기
백엔드/JPA

SPRING DATA JPA 실제 활용

by 임지혁코딩 2024. 1. 7.

1. @Repository 

 

기본적으로 @Component와 굉장히 유사하나, repository 전용이다.

즉 해당 class를 빈으로 등록한다.

가장 큰 차이는? peristenet layer의 발생 예외를 잡아서 DataAccessException으로 처리해준다. 

SPRING DATA JPA를 사용한다면, JPAREPOSITORY 안에 기본적으로 어노테이션이 되어있기 때문에 추가해줄 필요가 없다. 

REPOSITORY -> CRUDREPOSITORY ->LISTCRUD->JPAREPOSITORY 순으로 상속받아오는 내부 구조 .

 

두가지 방법, 하는 역할이 동일하다. 앞서 말한대로 JPA를 쓸거라면 QUERY를 직접 작성하지 않고, JPAREPOSITORY에 기능을 위임해서 사용하는것을 강하게 추천한다. 

주의사항, METHOD 벙식으로 (NULL,NULL)을 작성하면 

SELECT FROM ~~ WHERE EVENTNAME IS NULL로 들어간다. 모든것을 다 검색하는 것이 아니다. 

 

또한 METHOD 키워드 들이 정해져있어서, METHOD명을 일정 규약에 맞추어 주어야 한다. 

+JOIN은 불가능

@Param -> findbyEventnameandEventstatus(a,b)는 순서 기반으로 들어간다.

이걸 원하지 않을때는, @Param("eventName")등을 추가해주어야 한다. @Query -> 안쓰는게 맞다 . spring data jpa시. 

 

CRUD를 다 얼어주는 JPAREPOISTORY에서 사용하지 않고 싶을때는, JPAREPISOTRY가 아닌 일반 REPOSITORY를 찾아서 , FIND만을 등록해주고 사용하는 방식도 있다. (다만 FINDALL,FINDBYID 등등을 가져와야한다)다만 구현까지 진행할 필요는 없다. @NOrepositoryBean을 달아주어 repository로 되지는 않게 만들고, 만든 repoistory를 implements받아 사용하면 된다. 

 

2. @Entity내부 사용되는 것들 @Table,@Index,@UniqueConstraint등의 테이블 설정@ID,@GeneratedValue -> primary key 설정.@Column,@Enumerated (enum을 처리하는 방법). @Transient(entity과 꼭 table과 일치하지 않아도된다. abc,a+b=d를 만들고, abc만 table에 들어가고 싶을때)(이건 관계없는애야~ 라고 알려줌) join 관계 -> @OnetoOne,OnetoMany 등등..생성일지,수정일지 같이 일정 작성 메타데이터를 만들때 @PrePersist,@Postpresist등으로 생성한다. 자동 설정하기 위해선 -> @EntityListeners(AuditignEntityListener.class)를 받아서 사용하고, field에는 @CreateedBy, @CreatedDate,@LastmodifiedBy등 을 사용해서 쓸수있따. (by가 붙은 애들은 인증 이후 사용)

 

자동으로 생성하는 (metadata개념의) id

mysql등을 담당하는 identity, auto(mysql의 기본 형태가 아님 주의 )

column안에 , null이 불가능하고. column의 default값 등을 추가했다. enum을 string으로 확인하겠다. ENumStatus는 내가 만든 열거형

 

++Setter는 왜 부분으로 들어가있을까? 

db에 넣고, setter를 부분적으로 원하는 column에 적용하여 생성자에 포함되지 않게끔 사용할 수 있다. 

 

insert나 update를 사용하지 않게. //columndefinition에 on update 넣을시 update가 가능하다.

 

 

**반드시 주의해야 할 것 

ENTITY는 NoargsConstructor로 기본생성자를 생성해줘야한다! 

'백엔드 > JPA' 카테고리의 다른 글

JPA TEST  (0) 2024.01.07
MYSQL 적용 ++ POSTGRESQL 까지  (0) 2024.01.07
DataSource, Transacation Manager  (1) 2024.01.07
SPRING DATA JPA 개념들  (0) 2024.01.07