Everyday Dev System

JpaRepository 기능 제한하기 본문

내배캠 주요 학습/JPA 심화

JpaRepository 기능 제한하기

chaeyoung- 2023. 7. 31. 16:55

Repository의 기능을 제한하거나 추가해야 할 필요가 있다.

 

JpaRepository는 기본적으로 모든 기능을 제공하기 때문에 리스크 
따라서 원하는 기능 메소드만 구현하도록 제한해야 한다.

 

 

 

@RepositoryDefinition

 

@RepositoryDefinition 을 인터페이스에 기재하여 인터페이스 내에 명시된 메소드만 호출 할 수 있도록 제한 가능하다.

 

@RepositoryDefinition(domainClass = User.class, idClass = Long.class) 를 기재할 경우에는
extends JpaRepository<User, Long> 를 따로 기재할 필요가 없다.
package me.chaeyoung.jpa.user;

import java.util.Optional;
import org.springframework.data.repository.RepositoryDefinition;

@RepositoryDefinition(domainClass = User.class, idClass = Long.class)
public interface UserRepository {

  Optional<User> findByUsername(String username);
  // 해당 메서드 외에는 기능할 수 없도록 Repository 기능 제한
  
}

 

 

 

 

 

@NoRepositoryBean

@NoRepositoryBean 인터페이스로 한 번 더 감싸는 방식이다.

package me.chaeyoung.jpa.my;

import java.io.Serializable;
import java.util.Optional;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.Repository;

@NoRepositoryBean
public interface MyRepository<User, ID extends Serializable> extends Repository<User, ID> {

  Optional<User> findByUsername(String username);

}

Repository 를 상속받아 필요한 메서드만 명시한다.

 

package me.chaeyoung.jpa.user;

import me.chaeyoung.jpa.my.MyRepository;

public interface UserRepository extends MyRepository<User,Long> {


}

감싼 인터페이스인, MyRepository를 상속한다.

 

 

아래와 같이 findByUsername() 메서드만 사용할 수 있음을 알 수 있다.