어플리케이션의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미Java의 데이터 클래스와 관계형 데이터베이스의 테이블을 매핑객체지향 프로그래밍과 관계형 데이터베이스의 차이로 발생하는 제약사항을 해결해주는 역할을 수행대표적으로 JPA, Hibernate
이 글은 김영한님의 자바 ORM 표준 JPA 프로그래밍 강의를 듣고 정리된 글을 제 블로그에 옮긴 글입니다.영속성 컨텍스트가 더 이상 관리하지 않는 엔티티를 말한다. 즉 데이터베이스에 한번 갔다 온 엔티티를 준영속 엔티티라고 한다.변경 감지 기능 사용병합(merge)
이 글은 김영한님의 실전! 스프링 부트와 JPA 활용1 강의를 듣고 정리된 글을 제 블로그에 옮긴 글입니다.엔티티는 가급적 Setter를 사용하지 말자setter의 단점Setter는 사용 의도를 알기 어렵다값이 쉽게 변경 될 수 있다.immutable 하지 못하다.유지
엔티티에 프로젠테이션 계층을 위한 로직이 추가된다.엔티티에 API 검증을 위한 로직이 사용된다. (@NotEmpty 등등)엔티티 클래스에는 (@ManyToOne, @Id 등 많은 어노테이션이 사용된다. 여기에 API 검증을 위한 Validation 어노테이션이 사용된다
스프링 데이터 JPA Repository는 인터페이스만 정의하고 구현체는 스프링이 자동 생성스프링 데이터 JPA가 제공하는 인터페이스를 적접 구현하면 구현해야 하는 기능이 너무 많고 복잡한 쿼리를 따로 분리할 필요가 있을 때 사용된다.JPA 직접 사용(EntityMan
벌크성 수정 쿼리는 예를 들어 회사 전체 직원의 연봉을 10% 인상한다고 가정할 때 전체 직원의 연봉을 한번에 수정하는 것을 벌크성 수정(벌크성 삭제도 가능)이라고 한다.벌크성 수정, 삭제 쿼리는 @Modifying 어노테이션을 지정해줘야 한다. 지정하지 않을 경우 g
스프링 데이터 JPA에서는 페이징과 정렬을 쉽게 구현 할 수 있는 강력한 방법을 제공한다.org.springframework.data.domain.Sort : 정렬 인터페이스org.springframework.data.domain.Pageable : 페이징 인터페이스
쿼리 메소드 기능 메소드 이름으로 쿼리 생성 NamedQuery @Query Repository 메소드에 쿼리 정의 파라미터 바인딩 페이징과 정렬 벌크성 수정 쿼리 @EntityGraph 쿼리 메소드 기능 3가지 메소드 이름으로 쿼리 생성 메소드 이름으로 JPA Na
JpaRepository는 인터페이스이며 공통 CRUD를 제공해준다.JpaRespotirory를 사용하면 기존에 직접 구현 했던 코드를 더 이상 구현할 필요가 없어진다.@Repository 어노테이션 생략 가능하다.JpaRepository 인터페이스: 공통 CRUD를
모든 Entity 클래스를 Dto로 변환해야 한다. (Dto 클래스 안에 Entity 클래스도 Dto 로 변환해야 한다.)Order -> OrderDto 변환OrderDto안에 OrderItem -> OrderItemDto로 변환이렇게 실행할 경우 문제점SQL 실행 수
Entity를 DTO로 변환 > Entity를 직접 노출하는 것은 매우 매우 좋지 않기 때문에 Dto 클래스로 변환 후 화면에 노출시켜야 한다. Dto로 변환할 경우 데이터 베이스에 테이블이 변경되도 API 스펙에는 영향을 주지 않기 때문에 Dto로 변환해서 사용해야
엔티티를 api 컨트롤러에 직접 노출하면 안된다. 직접 노출할 경우 다음과 같은 문제가 발생한다.Api 컨트롤러 클래스에서 Order 엔티티 클래스로 데이터를 받은 후 직접 노출한 코드이대로 실행할 경우 첫번째 문제로 무한루프가 발생한다.Order 엔티티 클래스에 Me
Auditing란? Auditing란 스프링 데이터 JPA에서 시간에 대해서 자동으로 값을 넣어 주는 기능이다. Entity 클래스를 구현할 때 보통 등록일, 수정일은 필수 값으로 들어간다. 이러한 등록일, 수정일을 여러 클래스에서 따로 구현할 필요 없이 공통 클래스에
엔티티 대신에 DTO를 편리하게 조회할 때 사용전체 엔티티가 아니라 엔티티의 회원 이름만 조회하고 싶을 때 사용하면 좋음인터페이스 기반 방식 : 조회할 엔티티의 필드를 getter 혁식으로 지정하면 해당 필드만 선택해서 조회클래스 기반 방식 : 클래스 기반으로 구체적인