목록BE (354)
오봉이와 함께하는 개발 블로그
이전 코드 참조 https://5bong2-develop.tistory.com/233 글로벌 페치 전략 설정 모든 연관관계를 지연 로딩으로 @ManyToOne, @OneToOne은 기본이 즉시 로딩이므로 지연 로딩으로 변경 코드 @Entity @Getter @Setter public class Category extends BaseEntity{ @Id @GeneratedValue @Column(name = "CATEGORY_ID") private Long id; private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "PARENT_ID") private Category parent; @OneToMany(mappedBy = "p..
영속성 전이(CASCADE) 즉시 로딩, 지연 로딩과는 전혀 관련 없는 개념이다. 특정 엔티티를 영속 상태로 만들 때 연관된 다른 엔티티도 함께 영속 상태로 만들고 싶을 때 사용한다. 예를 들어 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장할 경우 영속성 전이를 사용하면 편리하다. @OneToMany(mappedBy="parent", cascade=CascadeType.PERSIST) 예제 코드 @Entity @Getter @Setter public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") private List childList = new ArrayLis..
즉시 로딩과 지연 로딩 @Entity @Getter @Setter public class Member extends BaseEntity{ @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String name; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } 일 때, 단순 member만 정보만 사용하는 비즈니스 로직이 있는데, Team의 정보를 사용하지 않을 수는 없을까? 그래서 JPA는 지연 로딩이라는 것을 지원한다 지연 로딩 @Entity @Getter @Setter public class Member exten..
프록시 @Entity @Getter @Setter public class Member extends BaseEntity{ @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String name; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } Member에 대한 정보만 필요할 때, Member와 Team 모두 필요할 때가 있을텐데, Member를 조회할 때 무조건 Team도 같이 조회가 되면 불필요한 쿼리가 생겨 성능상 큰 문제는 아닐지언정 좋지는 않을 것이다. 어떻게 하면 Member만 조회할 수 있을까? 프록시 ..
요구사항 추가 이전 작업 사항은 아래를 참조하자. https://5bong2-develop.tistory.com/230 Item 단독으로 저장될 일은 없다. 상품의 종류는 음반, 도서, 영화가 있고 이후 더 확장될 수 있음. 모든 데이터는 등록일과 수정일이 필수. 모델 코드 enum class와 Item을 상속 받는 클래스를 제외한 모든 클래스에 BaseEntity를 상속 받게 해줌. @MappedSuperclass @Getter @Setter public abstract class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTim..