package won.protocol.repository;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import won.protocol.message.WonMessageType;
import won.protocol.model.MessageEventPlaceholder;
import javax.persistence.LockModeType;
import java.net.URI;
import java.util.Date;
import java.util.List;
public interface MessageEventRepository extends WonRepository<MessageEventPlaceholder> {
MessageEventPlaceholder findOneByMessageURI(URI URI);
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select msg from MessageEventPlaceholder msg where msg.messageURI = :uri")
MessageEventPlaceholder findOneByMessageURIforUpdate(@Param("uri") URI uri);
List<MessageEventPlaceholder> findByParentURI(URI URI);
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select msg from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.messageType = :messageType")
List<MessageEventPlaceholder> findByParentURIAndMessageTypeForUpdate(
@Param("parent") URI parentURI,
@Param("messageType") WonMessageType messageType);
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select msg from MessageEventPlaceholder msg where msg.parentURI = :parent and " +
"referencedByOtherMessage = false")
List<MessageEventPlaceholder> findByParentURIAndNotReferencedByOtherMessageForUpdate(
@Param("parent") URI parentURI);
@Query("select msg from MessageEventPlaceholder msg where msg.parentURI = :parent")
Slice<MessageEventPlaceholder> findByParentURI(@Param("parent") URI parentURI, Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg left join fetch msg.datasetHolder where msg.parentURI = :parent")
Slice<MessageEventPlaceholder> findByParentURIFetchDatasetEagerly(@Param("parent") URI parentURI, Pageable pageable);
@Query("select messageURI from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.messageType = :messageType")
Slice<URI> getMessageURIsByParentURI(
@Param("parent") URI parentURI,
@Param("messageType") WonMessageType messageType,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.messageType = :messageType")
Slice<MessageEventPlaceholder> findByParentURIAndType(
@Param("parent") URI parentURI,
@Param("messageType") WonMessageType messageType,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg left join fetch msg.datasetHolder where msg.parentURI = :parent and msg.messageType = :messageType")
Slice<MessageEventPlaceholder> findByParentURIAndTypeFetchDatasetEagerly(
@Param("parent") URI parentURI,
@Param("messageType") WonMessageType messageType,
Pageable pageable);
@Query("select messageURI from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.creationDate < :referenceDate")
Slice<URI> getMessageURIsByParentURIBefore(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.creationDate < :referenceDate")
Slice<MessageEventPlaceholder> findByParentURIBefore(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg left join fetch msg.datasetHolder where msg.parentURI = :parent and msg.creationDate < :referenceDate")
Slice<MessageEventPlaceholder> findByParentURIBeforeFetchDatasetEagerly(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg left join fetch msg.datasetHolder where msg.parentURI = :parent and msg.creationDate < (select msg2.creationDate from MessageEventPlaceholder msg2 where msg2.messageURI = :referenceMessageUri )")
Slice<MessageEventPlaceholder> findByParentURIBeforeFetchDatasetEagerly(
@Param("parent") URI parentURI,
@Param("referenceMessageUri") URI referenceMessageUri,
Pageable pageable);
@Query("select messageURI from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.creationDate < :referenceDate and msg.messageType = :messageType")
Slice<URI> getMessageURIsByParentURIBefore(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
@Param("messageType") WonMessageType messageType,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.creationDate < :referenceDate and msg.messageType = :messageType")
Slice<MessageEventPlaceholder> findByParentURIAndTypeBefore(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
@Param("messageType") WonMessageType messageType,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg left join fetch msg.datasetHolder where msg.parentURI = :parent and msg.creationDate < :referenceDate and msg.messageType = :messageType")
Slice<MessageEventPlaceholder> findByParentURIAndTypeBeforeFetchDatasetEagerly(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
@Param("messageType") WonMessageType messageType,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg left join fetch msg.datasetHolder where msg.parentURI = :parent and msg.messageType = :messageType and msg.creationDate < (select msg2.creationDate from MessageEventPlaceholder msg2 where msg2.messageURI = :referenceMessageUri )")
Slice<MessageEventPlaceholder> findByParentURIAndTypeBeforeFetchDatasetEagerly(
@Param("parent") URI parentURI,
@Param("referenceMessageUri") URI referenceMessageURI,
@Param("messageType") WonMessageType messageType,
Pageable pageable);
@Query("select messageURI from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.creationDate > :referenceDate")
Slice<URI> getMessageURIsByParentURIAfter(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.creationDate > " +
":referenceDate")
Slice<MessageEventPlaceholder> findByParentURIAfter(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg left join fetch msg.datasetHolder where msg.parentURI = :parent and msg.creationDate > " +
":referenceDate")
Slice<MessageEventPlaceholder> findByParentURIAfterFetchDatasetEagerly(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
Pageable pageable);
@Query("select messageURI from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.creationDate > :referenceDate and msg.messageType = :messageType")
Slice<URI> getMessageURIsByParentURIAfter(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
@Param("messageType") WonMessageType messageType,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg left join fetch msg.datasetHolder where msg.parentURI = :parent and msg.creationDate > :referenceDate and msg.messageType = :messageType")
Slice<MessageEventPlaceholder> findByParentURIAndTypeAfter(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
@Param("messageType") WonMessageType messageType,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg where msg.parentURI = :parent and msg.creationDate > :referenceDate and msg.messageType = :messageType")
Slice<MessageEventPlaceholder> findByParentURIAndTypeAfterFetchDatasetEagerly(
@Param("parent") URI parentURI,
@Param("referenceDate") Date referenceDate,
@Param("messageType") WonMessageType messageType,
Pageable pageable);
@Query("select msg from MessageEventPlaceholder msg where msg.correspondingRemoteMessageURI = :uri")
MessageEventPlaceholder findOneByCorrespondingRemoteMessageURI(@Param("uri") URI uri);
@Query("select max(msg.creationDate) from MessageEventPlaceholder msg where msg.creationDate <= :referenceDate and " +
"parentURI = :parent")
Date findMaxActivityDateOfParentAtTime(@Param("parent") URI parentURI, @Param("referenceDate") Date referenceDate);
@Query("select max(msg.creationDate) from MessageEventPlaceholder msg where msg.creationDate <= :referenceDate and " +
"parentURI = :parent and msg.messageType = :messageType")
Date findMaxActivityDateOfParentAtTime(@Param("parent") URI parentURI, @Param("messageType") WonMessageType
messageType, @Param("referenceDate") Date referenceDate);
}