@Query fetch join + where문 같이 쓰는 방법

개발하는 구황작물·2022년 8월 24일
0

Spring

목록 보기
2/6

Posts

@NoArgsConstructor
@Setter
@Getter
@Entity
public class Posts {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long postId;

    @Column(name = "title", nullable = false)
    private String title;

    @Lob
    @Column(name = "content", nullable = false)
    private String content;

    @JoinColumn(name = "memberId",nullable = false)
    @ManyToOne
    private Member member;

    public void setMember(Member member) {
        this.member = member;
        if(!member.getPosts().contains(this)) {
            member.getPosts().add(this);
        }
    }
}

Member

@Setter
@Getter
@Entity
@NoArgsConstructor
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long memberId;

    @Column(name = "email", nullable = false, unique = true)
    private String email;

    @Column(name = "password", nullable = false)
    private String password;

    @OneToMany(mappedBy = "member")
    private List<Posts> posts;

    public void addPosts(Posts post) {
        posts.add(post);
        if(post.getMember() != this) {
            post.setMember(this);
        }
    }

}

쿼리문

@Query("select p from Posts p join fetch p.member where p.postId = :postId and p.member.memberId = :memberId")
public Optional<Posts> find(@Param("postId") Long postId, @Param("memberId") Long memberId);

결과

Hibernate: 
    select
        posts0_.post_id as post_id1_1_0_,
        member1_.member_id as member_i1_0_1_,
        posts0_.content as content2_1_0_,
        posts0_.member_id as member_i4_1_0_,
        posts0_.title as title3_1_0_,
        member1_.email as email2_0_1_,
        member1_.password as password3_0_1_ 
    from
        posts posts0_ 
    inner join
        member member1_ 
            on posts0_.member_id=member1_.member_id 
    where
        posts0_.post_id=? 
        and posts0_.member_id=?
profile
어쩌다보니 개발하게 된 구황작물

0개의 댓글