본문 바로가기

JPA5

[JPA] - 지연 로딩이어도 연관관계의 엔티티가 Null은 아니다. 1. 문제 의식 지연 로딩(링크)이 설정된 엔티티를 가져오는 경우,Transaction 범위 내에서 연관관계에 있는 엔티티를 구체적으로 요청하지 않는 이상 내부 엔티티 로딩은 지연된다. 예를 들어, 아래의 엔티티가 있다. @Entity public class Reply { @Id @GeneratedValue(GenerationType.INDENTITY) private Long rno; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "board_bno") priate Board board; } 이 엔티티를 가져오는 아래의 코드에서는 Reply 엔티티 내부의 Board 객체는 지연 로딩으로 설정되었으므로 DB처리가 되지 않을 것이다. public class .. 2024. 1. 29.
[JPA] - N+1 문제 및 @BatchSize의 의미와 Hibernate의 캐싱 전략 1. N+1 문제 JPA에서 엔티티가 서로 @OneToMany, @OneToOne, @ManyToOne 등으로 연결 관계를 형성한 경우, DB에서 엔티티를 가져올 때 연결된 객체를 어떻게 가져올지 전략을 잘 세워야 한다. 세부적인 내용은 아래 포스팅에 작성했으니 참고. [JPA] -연관관계가 있을 때 영속성 처리법과 cascade JPA 기술은 너무나 편리하지만, 한편으로 신경써야 할 것도 꽤 많다. 특히 테이블 사이의 연관관계가 형성될 때, JpaRepository에서 영속 처리를 하면 연관 관계에 있는 다른 엔티티들은 도대체 어떻 linocraft.tistory.com 일반적으로 연결된 객체를 한 번에 조인으로 가져오지 않고, 필요한 순간에만 다시 DB에 요청을 해서 가져오는 형태를 사용한다. 이것을.. 2024. 1. 25.
[JPA] -연관관계가 있을 때 영속성 처리법과 cascade JPA 기술은 너무나 편리하지만, 한편으로 신경써야 할 것도 꽤 많다. 특히 테이블 사이의 연관관계가 형성될 때, JpaRepository에서 영속 처리를 하면 연관 관계에 있는 다른 엔티티들은 도대체 어떻게 처리할지 생각해야 한다. 1. select는 지연 로딩과 즉시 로딩, 그리고 조인(JOIN) JpaRepository에서 findById()와 같은 메소드로 엔티티 객체를 가지고 오는 경우, 내부의 엔티티를 어떻게 가져올지 결정해야 한다. 처음 생각해야 할 것이 지연 로딩(LAZY)과 즉시 로딩(EAGER)이다. @Entity public class Reply { // .... @ManyToOne(fetch = FetchType.LAZY) private Board board; } 지연 로딩(LAZY.. 2024. 1. 24.
[JPA] - 영속성 컨텍스트와 지연 로딩(LAZY) 1. 지연 로딩이란? 아래와 같은 아주 간단한 Reply(댓글) Entity 클래스가 있다. @Entity public class Reply { @Id private Long rno; @ManyToOne(fetch = FetchType.LAZY) private Board board; } 댓글(Reply) 엔티티는 Board(게시판) 엔티티와 연결되어 있고, 그 관계는 댓글이 Many, 게시판이 One 관계다. 즉, 게시판 하나에 여러 개의 댓글이 달린 형태이며, 데이터베이스에서는 댓글(Reply) 테이블에 FK가 설정될 것이다. 만약 ReplyRepository 영속성 객체에서 댓글 하나를 가져온다고 하자. public void getReply() { Option option = replyReposito.. 2024. 1. 24.