Programming/JPA
![[Spring Data JPA] 유연한 조회 API만들기(Specification)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdYkbN%2FbtrJAH4VqpR%2FSHecNqApFmRSHydeFvuk1k%2Fimg.png)
[Spring Data JPA] 유연한 조회 API만들기(Specification)
저번 포스터에서 Query를 사용하는 여러가지 방법에 대해서 알아 봤습니다. 데이터를 조회하는 API를 구현할 때, 다양한 검색 조건을 처리할 수 있어야 합니다. 이렇게 유연하게 처리할 수 있게 도와주는 JPA Specificcation에 대해서 알아봅시다. 1. JPA Specification 이란? JPA Spectification은 DB 쿼리의 조건을 Spec으로 작성하여 요청할 수 있게 해줍니다. 다양한 조건이 계속 추가 될 수록 Spec으로 관리하게 되면 코드가 깔끔해지고 유지보수가 좀 더 용이해집니다. 2. Specification 구현 준비 JPA Specification을 구현하기 위해서는 Repository에 JpaSecificationExecutor를 추가로 상속 받아야합니다. publ..
![[Spring Data JPA] Query를 사용하는 여러가지 방법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWhn6t%2FbtrJwubRF1U%2FjGO7M0Ta8fClvqTrIyhh6K%2Fimg.png)
[Spring Data JPA] Query를 사용하는 여러가지 방법
Spring Data JPA에서 Query를 사용하는 방법은 여러가지가 있습니다. 1. Query Method 2. @Query 어노테이션 3. Query by Example 이제 각각 쿼리 사용 방법의 예제 코드를 보면서 어떻게 사용하는지 알아보겠습니다. 1. Query Method 일반적으로 JPA에서는 쿼리 메소드를 사용하여 쿼리를 만들 수 있습니다. 우리는 앞서 DB에 쿼리 요청을 하기 위해서 Repository 인터페이스를 만들었습니다. Repository에 메소드를 작성함으로써 정의된 메소드에 따라 쿼리를 자동으로 만들어서 요청 할 수 있게 됩니다. public interface MemberRepository extends JpaRepository { // MEMBER 테이블의 name col..
![[Spring Data JPA] FetchType - 즉시 로딩(EAGER)과 지연 로딩(LAZY)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8mLg6%2FbtrIT878fck%2FfYKrQgsUsEom29X1GvtOZk%2Fimg.png)
[Spring Data JPA] FetchType - 즉시 로딩(EAGER)과 지연 로딩(LAZY)
즉시 로딩 : @ManyToOne(fetch = FetchType.EAGER) 지연 로딩 : @ManyToOne(fetch = FetchType.LAZY) JPA JOIN에는 두 가지 로딩 방법이 존재합니다. 연관관계를 가지는 객체를 조회할 때 즉시 로딩할지, 필요할 때 로딩할지에 따라 즉시로딩(EAGER), 지연로딩(LAZY)를 선택할 수 있습니다. 이전 JPA 연관관계 매핑 포스팅에서 사용한 예제 코드로 fetch를 설명하겠습니다. 시나리오 1. 테이블은 회원(Member)와 팀(Team)이 있습니다. 2. 회원(N) : 팀(1) 관계로 다대일 다중성을 가지고 있습니다. 즉시 로딩(FetchType.EAGER) @Entity public class Team { @Id @GeneratedValue pr..
![[Spring Data JPA] 양방향 순환참조 문제 및 해결방법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpFr0K%2FbtrIKmUj5J3%2FRjC1XW93KMYe8BAOcJ3enk%2Fimg.png)
[Spring Data JPA] 양방향 순환참조 문제 및 해결방법
양방향 순환참조 문제 양방향 연관관계를 가진 두 객체가 서로를 참조하고 있어 무한히 서로의 정보를 조회하는 문제 Spring Boot에서 Rest API를 구현할 때 @ResponseBody 어노테이션을 사용하고, 응답 값으로 양방향 연관관계를 가진 객체를 반환하는 과정(JSON 형태로 변환)에서 순환 참조가 계속 발생해 stackoverflow가 발생하는 큰 문제점이 발생하였습니다. 아래는 예제 코드입니다. @Entity public class Team { @Id @GeneratedValue private Long id; private String name; // 양방향 @OneToMany(mappedBy="team") List members; } @Entity public class Member { ..
![[Spring Data JPA] JPA 연관관계 매핑(JOIN)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgYrfg%2FbtrIJVCncRd%2F9CjgkM6rE28tfU1PUGD0t1%2Fimg.png)
[Spring Data JPA] JPA 연관관계 매핑(JOIN)
연관관계 매핑이 필요한 이유 팀(Team)과 회원(Member)가 일대다의 관계를 가지는 연관관계일 때 예시 코드 팀과 회원의 객체 클래스 코드 @Entity public class Team { @Id @GeneratedValue private Long id; private String name; } @Entity public class Member { @Id @GeneratedValue private Long id; private String name; @Column(name = "team_id") private Long teamId; } 팀과 회원을 조회하는 코드 // 1번 ID를 가지는 회원 찾기 Member member = em.findById(1); // 회원의 TeamId로 팀 찾기 Long ..
![[Spring Data JPA] JPA 주요 어노테이션(Annotation)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXsTgR%2FbtrIFH441eM%2FLSBEGZe0NJmxIXTC0wCDe0%2Fimg.png)
[Spring Data JPA] JPA 주요 어노테이션(Annotation)
JPA에는 어노테이션을 통해 여러가지 설정을 할 수 있다. 어떤 어노테이션들이 있는지 정리해보자. Entity 관련 @Entity @Table(name = "member") public class Member { @Id @GeneratedValue(startegy=GenerationType.IDENTITY) private Integer id; @Column(name="member_name") private String memberName; @Enumerated(value=EnumType.STRING) private RoleType role; @Column(name="created_time") @Temporal(value=TemporalType.TIMESTAMP) private LocalDateTime c..
![[Spring Data JPA] JPA란? JPA기본 예제](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY0d4d%2FbtrIioEEsuM%2FKCFmFK7U6XWk6UC2DAmE9K%2Fimg.png)
[Spring Data JPA] JPA란? JPA기본 예제
JPA란? JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준 JPA가 제공하는 API를 사용하며, 개발자가 SQL를 작성하지 않아도 된다. JPA가 개발자 대신 적절한 SQL를 생성해준다. (JPQL) 객체(Entity)를 관계형 DB와 자동으로 Mapping 해준다. (ORN) ORM Object-Relational Mapping의 줄임말. 객체와 관계형 DB를 매핑한다는 뜻. ORM 프레임워크를 사용하면 객체와 DB와의 매핑을 통해 적절한 SQL를 생성하여 DB에 객체를 저장해준다. 의존성 추가 maven repository 주소 : https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starte..