ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPQL 방식으로 JPA 쿼리 메서드 직접 정의하기
    카테고리 없음 2023. 1. 30. 00:21

    Message 중, Type이 Enter이거나 Quit인 Message이면서 특정 roomId 값을 갖는 Message만 가져오기

     

    // services/GetChattingMessagesService.java
    
    // 방법 1: JPA 쿼리 메서드 이름으로 지정
    List<ChattingEventMessage> eventMessages
        = chattingMessageRepository
            .findAllByRoomIdAndTypeOrRoomIdAndType(
                roomId,
                ChattingMessageType.ENTER,
                roomId,
                ChattingMessageType.QUIT
    );
    
    // 방법 2: 쿼리 명령어를 직접 정의
    List<ChattingEventMessage> eventMessages
        = chattingMessageRepository
            .findAllByRoomIdAndEventTypes(
                roomId,
                ChattingMessageType.ENTER,
                ChattingMessageType.QUIT
    );

     

    // repositories/ChattingMessageRepository.java
    
    List<ChattingEventMessage> findAllByRoomIdAndTypeOrRoomIdAndType(Long roomId,
                                                                     ChattingMessageType enter,
                                                                     Long samdRoomId,
                                                                     ChattingMessageType quit);
    
    @Query(
        "SELECT chatting_message " +
            "FROM ChattingMessage chatting_message " +
            "   LEFT JOIN ChattingEventMessage event_message " +
            "   ON chatting_message.id = event_message.id " +
            "WHERE (chatting_message.roomId = :roomId AND chatting_message.type = :enter) " +
            "   OR (chatting_message.roomId = :roomId AND chatting_message.type = :quit)")
    List<ChattingEventMessage> findAllByRoomIdAndEventTypes(@Param("roomId") Long roomId,
                                                            @Param("enter") ChattingMessageType enter,
                                                            @Param("quit") ChattingMessageType quit);

     

     

     

    References

    - https://www.baeldung.com/spring-data-jpa-query

    - https://yomiju.tistory.com/m/737

     

     

    댓글

Designed by Tistory.