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가 붙은 애들은 인증 이후 사용)
mysql등을 담당하는 identity, auto(mysql의 기본 형태가 아님 주의 )
++Setter는 왜 부분으로 들어가있을까?
db에 넣고, setter를 부분적으로 원하는 column에 적용하여 생성자에 포함되지 않게끔 사용할 수 있다.
**반드시 주의해야 할 것
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 |