JPQL Java Persistence Query Language / Hibernate Query Language 를 의미 데이터베이스 테이블이 아닌, 엔티티 객체 모델 기반으로 쿼리를 작성하는 SQL과 유사한 구문이다. JPA또는 Hibernate가 해당 쿼리를 SQL로 변환해서 실행한다 TypedQuery query = entityManager.createQuery("SELECT p FROM Post AS p", Post.class); List posts = query.getResultList(); posts.forEach(System.out::println); Criteria JPA에서 제공하는 타입 세이프한 쿼리로써 JPQL에서 오타가 났을 경우 이것을 체크하지 못하는 문제를 방지한다. Nativ..
JPA Fetch 연관된 엔티티의 정보를 언제 가져올 것인가를 정하는 것이다. @OneToMany의 기본값은 Lazy @ManyToOne의 기본값은 Eager @OneToMany 예제 package com.kyhslam; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; @Entity publi..
| 엔티티 상태 JPA에서는 엔티티의 상태를 다음과 같이 나눈 후 사용자가 요청한 사항에 맞추어 관리하게 됩니다. Transient : JPA가 엔티티를 나타내는 객체에 대한 정보를 모르는 상태 Persistent : JPA가 엔티티를 관리 중인 상태 (1차 캐시, Dirty Checking, Write Behind, ..) Dirty Checking : 객체의 변경사항을 계속 감지 Write Behind : 객체의상태변화을 데이터베이스에 최대한 늦게, 필요한 시점에 반영한다는것이다. Detached : JPA가 더이상 엔티티를 관리하지 않는 상태 Removed : JPA가 엔티티를 관리하는 상태에서 이 엔티티를 삭제하기로한 상태 save를 했다고 바로 DB에 쿼리를 날리는 것은 아니다. Casade 옵..
| @ManyToOne package org.kyhslam.jpa; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entity public class Study { @Id @GeneratedValue private Long id; private String name; // 하나의 계정으로 여러 study를 만들 수 있기 때문에 MaytoOne이다. // (뒤에께 해당 컬럼에 해당) // 햇갈릴 경우에는 앞쪽이 해당클래스(Study)이고 뒤쪽이 해당 컬럼(Account) @ManyToOne private ..
@NotNull Null 값이 될 수 없다는 것을 명시한다. NullPointerException에 대한 대안이 될 수 있다. @Cleanup 자동으로 close() 메소드를 호출하는 역할을 한다. @Getter/Setter Setter/Getter 을 생성한다. @ToString toString에 대한 메소드 생성 @NoArgsConstructor / @RequiredArgsConstructor / @AllArgsConstructor 파라미터를 받지 않는 생성자를 만들어 준다.(@NoArgsConstructor) 지정된 속성들에 대해서만 생성자를 만들어 준다.(@RequiredArgsConstructor) 모든 속성에 대해서 생성자를 만든다. (@AllArgsConstructor) @Data @ToSt..
학습 Entity 생성 DB 저장 Docker의 테이블 확인 4. Account package org.kyhslam.jpa; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Account { @Id @GeneratedValue private long id; private String username; private String password; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getUsername()..
@Entity 엔티티는 자바에서 객체지향적인 코드를 작성할 때 네이밍된 DB와 대응된느 클래스의 이름이다. 보통 클래스와 같은 이름을 사용하기 때문에 값을 변경하지 않는다. 값을변경할 때는 @Entity(name="myAcount") 와 같은 형식의 어노테이션을 붙이면 된다. @Table 테이블은 RDBMS 안의 릴레이션 스키마에 대응되는 이름을 나타낸다. @Table(name="myAcount") 같은 형식의 어노테이션을 붙여서 엔티티와 대응되는 테이블명을 명시할 수 있다. @Id 엔티티의 주키를 매핑할 때 사용한다. 자바의 모든 Primtive 타입과 그 래퍼타입을 사용할 수 있다. @GeneratedValue 주키의 생성 방법을 매핑하는 어노테이션이다. 생성전략과 생성기를 설정할 수 있다. 기본적으..
ORM (Object Relational Mapping) ORM은 애플리케이션의 클래스와 SQL 데이터베이스의 테이블 사이의 맵핑 정보를 기술한 메타데이터를 사용하여, 자바 애플리케이션의 객체를 SQL 데이터베이스의 테이블에 자동으로 영속화 해주는 기술이다. 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다 ORM프레임워크가 중간에서 매핑해준다 ORM은 객체와 RDB 두 기둥 위에 있는 기술이다. JPA(Java Persistent API) JPA(Java Persistent API)는 자바의 영속성 관리와 ORM을 위한 표준 기술이다. 기존 EJB ORM이던 Entity Bean을 JPA라 바꿔 체계화한 기술이다. ORM(Object Relational Mapping) 이란..
API Application Programming Interface Rest REpresentational State Transfer 인터넷상의 시스템간의 상호 운용성(interoperability)을 제공하는 방법 중 하나 시스템 제각각의 독립적인 진화를 보장하기위한 방법 Rest API : REST 아키텍처 스타일을 따르는 API Self-descriptive message 메세지 스스로 메시지에 대한 설명이 가능해야 한다. 서버가 변해서 메시지가 변해도 클라이언트는 그 메시지를보고 해석이 가능하다. 확장 가능한 커뮤니케이션 HATEOAS 하이퍼미디어(링크)를 통해 애플리케이션 상태 변화가 가능해야 한다. 링크 정보를 동적으로 바꿀 수 있다.(Versioning 필요없이) HAL - Hypertext..
@Query에는 JPQL(객체 쿼리)을 이용한다. JPQL은 쉽게 말해서 JPA에서 사용하는 Query Language이다. package com.kyhslam.persistence; import java.util.Collection; import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import com.kyhslam.domain.Board; pub..
Page는 단순 데이터만의 추출하는 용도가 아니라, 웹에서 필요한 데이터들을 추가적으로 처리해 준다. package com.kyhslam.persistence; import java.util.Collection; import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.repository.CrudRepository; import com.kyhslam.domain.Board; public interface BoardRepository extends CrudRepository { public Page ..
package com.kyhslam.persistence; import java.util.Collection; import java.util.List; import org.springframework.data.domain.Pageable; import org.springframework.data.repository.CrudRepository; import com.kyhslam.domain.Board; public interface BoardRepository extends CrudRepository { // bno > ? ORDER BY bno DESC limit ?,? public List findByBnoGreaterThanOrderByBnoDesc(Long bno, Pageable paging); ..