JPA(10)
-
[Spring Data JPA] 데이터 수정 / Dirty checking 시 save를 별도로 해줘야 한다 ?
[문제] update로 entity의 값을 바꿔주기만 해도 수정이 되는 것은 알고 있지만, 만약 PostRepository의 구현체를 JPA가 아닌 MyBatis 등으로 바꾼다면 ? 그럼 DB에 수정된 값이 들어가지 않을 것이다. 이 상황은 OCP를 어기고 있다. 그래서 save를 통해 한 번 더 수정값을 저장해주는 코드를 반영하였다. 그런데 이렇게 되면 JPA는 어떤식으로 작동할까 의문이었다. 간단히 정리하면 영속성 매니저가 merge라는 메서드를 호출하며 수정 작업이 이루어진다. 이 과정에서 오버헤드가 발생할 수 있기 때문에 비효율적일 수도 있다. [해결] HibernateRepository 를 JpaRepsitory와 함께 상속받아서 update 메서드를 사용한다. 이렇게 하면 성능에도 좋다고 한다..
2023.04.13 -
[SpringData JPA] 생성시간, 수정시간 자동 (JPA Auditing, BaseEntity)
객체를 생성하거나 수정할 때 생성 날짜, 수정 날짜를 관리하는 경우가 많다. LocalDateTime.now( )을 매번 setter 하기엔 번거롭다. 그리고 그래서 모든 Entity의 생성시간, 수정시간을 관리해주는 JPA Auditing이 있다. 해당 어노테이션은 SpringBootApplication 을 실행하는 클래스에 함께 적용한다. 즉, Entity를 DB에 적용하기 이전, 이후에 콜백 리스너를 요청하게 해주는 어노테이션이다. [사용 예시] @MappedSuperclass @Getter @EntityListeners(AuditingEntityListener.class) public class BaseEntity { @Id @GeneratedValue(strategy = GenerationTyp..
2023.03.19 -
스프링 부트 & JPA 실전 사용 감 익히기
2/3 * Entity를 만들때 객체를 타입으로 갖기 위해서는 @Embeddible 해줘야 한다. @Embeddible @Embeddied @ManyToOne @OneToMany @JoinColumn (fk) 주인 mappedBy( 주인에서 정한 컬럼명) @Enumrated * 맵핑 연관관계 주인 다대일 관계에서 다에 fk 일대일에서는 어디에 fk를 둬도 상관 X (직접 조회하는 곳에다 둠) 다대다 상황에서 RDB는 객체끼리 연결이 불가능하기 때문에 중간에 징검다리 역할을 해줄 애를 놔둔다. (실무 X) fk가 있는 쪽 -> 주인 *엔티티 설계시 주의점 모든 연관관계는 지연로딩으로 설정! 즉시로딩( EAGER )은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1..
2023.02.03 -
Spring JPA 기본
2.2 JPA : ORM 데이터 접근 기술 제공 ...... Object-relational mapping (객체 관계 매핑) 객체는 객체대로 관계형 데이터베이스는 관계형 데이터베이스대로 ORM 프레임워크가 중간에서 매핑 JAVA에플리케이션 ----> JPA
2023.02.02