Spring Data JPA: 26개의 글
Spring Data 란? Spring Data’s mission is to provide a familiar and consistent, Spring-based programming model for data access while still retaining the special traits of the underlying data store. It makes it easy to use data access technologies, relational and non-relational databases, map-reduce frameworks, and cloud-based data services. This is an umbrella project which contains many subprojec..
오늘 포스팅할 내용은 간단히 JPA의 cascade 기능이다. 이전 포스팅 중에 해당 내용에 대해 포스팅한적이 있지만 조금 부족한 것같아서 다시 한번 정리할겸 글을 남긴다. 영속성 전이(cascade)란 쉽게 말해 부모 엔티티가 영속화될때, 자식 엔티티도 같이 영속화되고 부모 엔티티가 삭제 될때, 자식 엔티티도 삭제되는 등 부모의 영속성 상태가 전이되는 것을 이야기한다. 영속성전이의 종류로는 ALL, PERSIST, DETACH, REFRESH, MERGE, REMOVE등이 있다. 이름만 봐도 어디까지 영속성이 전이되는지 확 눈에 보일 것이다. 여기서는 별도로 각각을 설명하지는 않는다. 오늘의 상황 : A와 B라는 엔티티가 존재하고, 두 엔티티의 관계는 @ManyToMany 관계이다. 이 관계는 중간에 ..
| Spring JPA Specification Spring JPA Specification은 Spring JPA에서 제공하는 검색 조건을 메서드 형태로 추상화하여 Repository 인터페이스에서 해당 검색 조건을 조합하고 쿼리하기 쉽게 할 수 있는 기능입니다. | Spring JPA Specification 예제 프로젝트 구조 +---src | +---main | | +---java | | | \---com | | | \---tutorial | | | \---springboot | | | Application.java | | | Comment.java | | | CommentRepository.java | | | CommentSpecs.java | | | | | \---resources | | | a..
| Spring JPA Projection Spring JPA에서 제공하는 Projection 기능은 엔티티의 일부 데이터만을 가져오게 하는 기능입니다. Projection은 인터페이스 기반으로 구현되며 이 인터페이스를 가지고 Repository의 반환값에 명시하면 이 정보를 토대로 JPA가 해당 쿼리를 최적화해서 가져올 수 있거나 표현식을 사용하여 DB에서 데이터를 커스터마이징하여 가져올 수 있습니다. | Spring JPA Projection 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springevent │ │ │ ├── Application.java │ │ │ ├── Comment.jav..
| EntityGraph란 엔티티들은 서로 연관되어 있는 관계가 보통이며 이 관계는 그래프로 표현이 가능합니다. EntityGraph는 JPA가 어떤 엔티티를 불러올 때 이 엔티티와 관계된 엔티티를 불러올 것인지에 대한 정보를 제공합니다. FetchType.LAZY 와 FetchType.EAGER로 연관 엔티티를 가져올 것인지를 결정할 수 있습니다. 하지만 이 구문은 정적이며 런타임 시 이 설정을 변경하지 못하는 단점이 있었습니다. EntityGraph는 이러한 점을 보완하고 연관 엔티티를 어떻게 로딩할 것인지에 대한 정보를 제공함으로서 엔티티 로딩 속도를 높일 수 있는 장점이 있습니다. | EntityGraph 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └─..
| Named Parameter @Query 어노테이션을 통해서 매개변수를 ?1, ?2 꼴과 같이 참조하는 것이 아니라 이름으로 다음과 같이 참조할 수 있습니다. @Query("SELECT p FROM Post as p where p.title = :title") List findByTitle(@Param("title") String title, Sort sort); | SpEL @Query에서 엔티티 이름을 #{#entityName}으로 변경할 수 있습니다. 이 표현식의 이점은 엔티티의 이름을 변경할 때 이 @Query 어노테이션 문을 변경하지 않고 사용할 수 있다는 점입니다. @Query("SELECT p FROM #{#entityName} as p where p.title = :title") Lis..
| Spring JPA 쿼리 메서드 Spring JPA에서 DB에 쿼리를 날릴 때 사용할 수 있는 방법은 크게 3가지가 있습니다. 1. 리포지터리 메서드 2. @NamdeQuery 3. @Query [Spring Framework/Spring JPA] - [Spring JPA #13] 스프링 데이터 쿼리 만들기 | Spring JPA 쿼리 메서드 예제 Repository 인터페이스에 메서드명으로 어떤 쿼리를 날릴 지 정할 수 있습니다. pository 인터페이스에 메서드명으로 어떤 쿼리를 날릴 지 정할 수 있습니다. public interface PostRepository extends JpaRepository { List findByTitleStartsWith(String title); } "Title..
| 스프링 데이터 HATEOAS HATEOAS에 대한 설명은 아래 링크로 대신하겠습니다. [Spring Framework/Spring boot2] - [Spring Boot #19] 스프링 부트 Spring HATEOAS | 스프링 데이터 HATEOAS 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springevent │ │ │ ├── Application.java │ │ │ ├── PostController.java │ │ │ ├── Post.java │ │ │ └── PostRepository.java │ │ └── resources │ │ └── application.properties │ ..
| 스프링 데이터 Pageable과 Sort 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springevent │ │ │ ├── Application.java │ │ │ ├── PostController.java │ │ │ ├── Post.java │ │ │ └── PostRepository.java │ │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── com │ └── tutorial │ └── springevent │ └── PostControllerTest.java 의존성 관리 org.springframework...
| 스프링 데이터 DomainClassConverter 스프링에서 Converter는 컨트롤러에 사용자 요청이 오게될 때, 요청값을 다른 타입으로 변환하여 컨트롤러의 메서드에 전달하는 역할을 하는 인터페이스를 의미합니다. DomainClassConverter는 이 개념을 확장하여 어떤 사용자 요청에 대한 요청값을 도메인 클래스로 변환하여 컨트롤러의 메서드에 전달하는 Converter를 의미합니다. | 스프링 데이터 DomainClassConverter 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springevent │ │ │ ├── Application.java │ │ │ ├── PostCont..