-
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