springframework/Spring Data JPA 41

Spring Data JPA : Sort 시 내부함수 호출

Sort 방법에 제약사항이 있다. Sort 객체의 매개 값으로 오는 것은 Property 명, 또는 Alias 여야 할 것. public interface CommentRepository extends JpaRepository { List findByTitle(String titile, Sort sort); } @Test public void testSort(){ Comment comment = new Comment(); comment.setTitle("Spring?"); comment.setComment("Data JPA"); Comment savedComment = commentRepository.save(comment); List sortedComment = commentRepository.find..

Spring Data JPA : Enity 저장

JpaRepository 의 save() 는 단순히 Entity 를 추가하는 메서드가 아니다. Transient 상태의 Entity 라면 persist() 를 호출하여 Persistent 상태로 변환한다. Detached 상태의 Entity 라면 merge() 를 호출하여 Attach 시켜 Persistent 상태로 변환한다. EntityManager.merge() Merge() 메서드 의 매개 값인 Entity 의 복사본을 만들고, 복사본을 Persistent 상태로 돌린 후 리턴한다. 만약, Id 식별자가 저장된 데이터에 없는 값이라면 새로운 Entity 로 간주하고 Insert 시킨다. 판단 기준은 @Id 프로퍼티이다. @Id 프로퍼티가 null = Transient 상태로 간주 @Id 프로퍼티가 ..

Spring Data JPA : JPA Repository

@Configuration 설정클래스에 @EnableJpaRepositories 를 사용해야 JpaRepository 를 상속 받은 프록시 Bean 을 제공한다. 스프링 부트는 기본적으로 제공하는 기능이기에 사용하지 않아도 된다. EntityManager , TransactionManager, PackageScan 시작 점 들을 등록할 수 있는게 @EnableJpaRepositories JpaRepository 의 구현체인 SimpleJpaRepository 에 @Repository 어노테이션이 붙어있는데 @Repository 를 붙이는 것은 중복 @Repository 어노테이션이 붙게 되면 SQLException JPAException 등을 Spring 내부적으로 DataAccessException 으..

Spring Data Common : Web - HATEOAS

Page 를 PagedModel 로 변환 PagedModel 형태의 리턴 값을 가지게 된다. 매개변수에 PagedResourcesAssembler 추가 가능 PagedResourcesAssembler 의 toModel(Page) 메서드로 결과 값을 매핑하여 보낼 수 있음 @GetMapping("/posthateoas") public PagedModel getPostWithHATEOAS(Pageable pageable, PagedResourcesAssembler pagedResourcesAssembler){ Page all = postRepository.findAll(pageable); return pagedResourcesAssembler.toModel(all); } @Test public void te..

Spring Data Common : Web - Pageable , Sort

스프링 MVC 의 Handler(=Controller) 의 매개변수를 확장시킨다. Pageable Sort @GetMapping("/posts") public Page getPosts(Pageable pageable){ return postRepository.findAll(pageable); } Pageable 을 위한 파라미터 page : 0 부터 시작, 페이지 넘버 size : 가져올 레코드 수, default 20 sort : 프로퍼티,(ASC|DESC) default asc 쿼리스트링은 이런식 : sort=property,desc&sort=property @Test public void testPosts() throws Exception { Post post = new Post(); post.se..

Spring Data Common : Web - Domain Class Converter

DomainClassConverter Id 를 받아 DomainClass 로 컨버팅 시켜주는 녀석 ToEntityConverter : Entity 의 Id 를 Entity 로 컨버팅 ToIdConverter : Entity 를 Entity 의 Id 로 컨버팅 RequestParameter 나 @PathVariable 을 Entity 컨버팅 해주는 기능은 내부적으로 findById() 를 호출한다. @GetMapping("/post/{id}") public String getPost(@PathVariable("id") Post post) { /* Optional byId = postRepository.findById(id); Post post = byId.get(); */ return post.getTit..

Spring Data Common : Web 소개

제공기능 사실, 제공기능 소개인데, 궁금해서 직접 짜봤다. public interface PostRepository extends JpaRepository, QuerydslPredicateExecutor { Page findAll(Pageable pageable); } @RestController public class PostController { @Autowired private PostRepository postRepository; @GetMapping("/post/{id}") public String getTitle(@PathVariable("id")Post post) { return post.getTitle(); } @GetMapping("/posts") public PagedModel getP..

Spring Datat Common : QueryDSL 변경사항

버전 업으로 인한 QuerydslJpaRepository 의 Deprecated 의존, 플러그인 설정 maven compile 에 의한 자동생성 클래스는 동일하다. @NoRepositoryBean 을 가진 JpaRepository 상속 인터페이스 설정도 동일 @NoRepositoryBean public interface MyCommonRepository extends JpaRepository { boolean contatins(T entity); } 기본 커스텀 리포지토리 구현 클래스 설정과 등록은 같으나 상속 구조는 SimpleJpaRepository 를 사용. public class MyCommonRepositoryImpl extends SimpleJpaRepository implements MyCo..

Spring Data Common : QueryDSL

왜 쿼리 DSL 을 사용하는가? 자바 코드로 조건 문을 표현할 수 있음 Type-Safe Predicate 인터페이스로 조건을 조합하고, 조건을 표현하고, 조건을 모아서 관리할 수 있다. 핵심 인터페이스 QuerydslPredicateExecutor Spring Data 에 포함 Optional findOne(Predicate) List | Page | Iterable findAll(Predicate [Pageable]) 연동방법 의존성 추가 / http://www.querydsl.com/static/querydsl/4.1.3/reference/html_single/#jpa_integration querydsl-apt 는 쿼리를 생성해주는 모듈 플러그인추가 apt-maven-plugin 스프링 부트에 의..