berryberrybin / board-project

0 stars 0 forks source link

N:1 단방향 매핑시 단건 조회 문제 해결 - @EntityGraph 이용 #15

Open berryberrybin opened 1 year ago

berryberrybin commented 1 year ago

Faq와 FaqCategory 코드

@Getter
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "faq")
@SQLDelete(sql = "UPDATE faq SET deleted=true WHERE faq_id = ?")
@Where(clause = "deleted=false")
@Access(AccessType.FIELD)
public class Faq {

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "faq_id", unique = true, updatable = false, nullable = false, columnDefinition = "BINARY(16)")
    private UUID id;

    @Column(length = 30)
    private String title;

    @Column(length = 500)
    private String content;

    @CreatedDate
    private LocalDateTime createdAt;

    @Column
    private Boolean visible = false;

    @Column
    private Boolean deleted = false;

    @Column(columnDefinition = "integer default 0", nullable = false)
    private int viewCount;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "faq_category_id", nullable = false)
    private FaqCategory faqCategory;

    public Faq() {
    }

    @Builder
    public Faq(String title, String content, FaqCategory faqCategory, Boolean visible) {
        this.title = title;
        this.content = content;
        this.faqCategory = faqCategory;
        this.visible = visible;
    }

    public void updateFaq(String title, String content, FaqCategory faqCategory, Boolean visible) {
        this.title = title;
        this.content = content;
        this.faqCategory = faqCategory;
        this.visible = visible;
    }

    public void increaseViewCount() {
        this.viewCount += 1;
    }
}
@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FaqCategory {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "faq_category_id")
    private Long id;

    private String faqCategoryName;
    private int faqCategoryOrderNumber;

    private FaqCategory(Long faqCategoryId) {
        this.id = faqCategoryId;
    }

    public void updateFaqCategory(String faqCategoryName, int faqCategoryOrderNumber) {
        this.faqCategoryName = faqCategoryName;
        this.faqCategoryOrderNumber = faqCategoryOrderNumber;
    }

}
berryberrybin commented 1 year ago

N:1 단방향 매핑

문제 발생

}


![image](https://user-images.githubusercontent.com/67494127/199881066-c3123978-4cfc-4e1f-8878-ef11ca836a77.png)
berryberrybin commented 1 year ago

지연 로딩시 FaqCategory 조회 못하는 원인

문제 해결

해결 코드