DB/JPA6 JPA 즉시 로딩, 지연 로딩 즉시 로딩, 지연 로딩 JPA를 사용하면 즉시 로딩과 지연 로딩을 선택해서 사용할 수 있습니다. fetch = FetchType.LAZY = 지연 로딩 fetch = FetchType.EAGER 둘의 차이점은 즉시 로딩은 연관관계로 매핑되어 있는 상황이라면 join을 통해서 한 번의 SELECT를 통해서 데이터를 가져옵니다. 반대로 지연 로딩은 하나의 객체만을 SELECT를 통해서 데이터를 가져오고 연관관계로 매핑되어 있는 객체는 Proxy 객체로 가져오고 해당 객체에 대해 getter 메서드등을 통해서 값을 가져올 때 SELECT를 날려서 데이터를 가져옵니다. 지연 로딩으로 데이터를 가져올 시 주의할 점 회원의 주요 정보가 담겨있는 User 객체와 부가 정보가 담겨있는 UserDetail은 OneToO.. DB/JPA 2023. 1. 20. @PrePersist... Entity를 DB에 적용하기 전, 후로 커스텀 콜백을 요청하는 어노테이션이 있습니다. @PrePersist @PostPersist @PostLoad @PreUpdate @PostUpdate @PreRemove @PostRemove 어노테이션 이름으로 유추해 보아도 무슨 역할을 하는지 알 수 있습니다. 하나씩 살펴보겠습니다. @PrePersist & @PostPersist @Slf4j @Entity @Builder @Getter @Table(name = "postMst") public class Post extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long postCode; @NotNull .. DB/JPA 2023. 1. 14. JPA Auditing Auditing? 우리가 JPA 등 ORM을 사용하여 Entity 객체를 DB 테이블에 매핑할 때 무조건 필요하거나 다른 객체에서도 매핑이 필요한 컬럼들이 존재할 수 있습니다. 대표적으로 생성날짜, 수정날짜등이 있습니다. 이러한 생성일/수정일/생성자/수정자를 자동화되게끔 해주는 것이 JPA Auditing입니다. JPA에서 사용하기 위해서는 @EnableJpaAuditing 어노테이션이 필요합니다. 보통 Springboot를 실행시키는 클래스에 작성합니다. @EnableJpaAuditing @SpringBootApplication public class InstagramApplication { public static void main(String[] args) { SpringApplication.run.. DB/JPA 2023. 1. 7. JPA @Entity @Entity @Builder @Getter @Table(name = "postMst") public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long postCode; @NotNull @Column(name = "postContent") private String content; @Temporal(TemporalType.TIMESTAMP) private Date createDate; @Temporal(TemporalType.TIMESTAMP) private Date updateDate; } @Table 엔티티와 매핑할 테이블을 지정합니다. 생략하면 매핑한 엔티티의 이름을 테이블 이름으로 사용합니다. @Ent.. DB/JPA 2023. 1. 6. JPA DTO Mapping JPA를 사용하면서 원하는 데이터를 받기 위해서 NativeQuery를 작성하고 싶었는데 객체가 연관관계가 포함이 되어있어서인지 필요 없는 컬럼들도 추가를 해줘야 하는 상황이 되어버려서 다른 방법을 찾는 도중에 DTO로 바로 Mapping 시킬 수 있는 방법을 찾았습니다. @SqlResultSetMapping, @NamedNativeQuery 를 이용해서 DTO로 받기 @SqlResultSetMapping( name = "followingListMapping", classes = @ConstructorResult( targetClass = ReadFollowListResponseDto.class, columns = { @ColumnResult(name = "followCode", type = Intege.. DB/JPA 2022. 12. 29. JPA 더티 체킹(Dirty Checking) 이번에 Mybatis 대신해서 JPA로 개인 프로젝트를 진행하려고 해서 JPA에 대해서 공부 중입니다. JPA는 Mybatis와 다르게 ORM(Object-Relational-Mapping)입니다. ORM(Object-Relational-Mapping)? ORM은 객체(Object)와 DB 테이블을 Mapping 함으로써 RDM 테이블을 객체지향적으로 관리할 수 있게 해 줍니다. 객체와 RDB의 중간에서 ORM이 매핑을 해주기 때문에 별도의 쿼리문을 작성하지 않습니다. 하지만 복잡한 쿼리문이 필요한 경우에는 직접 작성해서 사용 가능합니다. Mybatis는 SQL Mapper로 객체를 매핑하는 것이 아닌 쿼리를 매핑합니다. 즉 우리가 작성한 쿼리문이 필요합니다. 더티 체킹(Dirty Checking)? J.. DB/JPA 2022. 12. 25. 이전 1 다음