iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0

前言

待補。

@Repository
public interface ArticleJpaRepository extends JpaRepository<ArticleEntity, UUID> {

    @Query("""
        SELECT a FROM ArticleEntity a
            WHERE a.source = :source
                AND a.externalId = :externalId
    """)
    Optional<ArticleEntity> findBySourceIdAndExternalId(
            @Param("source") SourceType source,
            @Param("externalId") String externalId);

    @Query("""
        SELECT a FROM ArticleEntity a
            WHERE a.urlHashHex = :urlHashHex
    """)
    Optional<ArticleEntity> findByUrlHashHex(
            @Param("urlHashHex") String urlHashHex);

    @Query(
            value = """
      WITH ranked AS (
        SELECT a.*,
               ROW_NUMBER() OVER (
                 PARTITION BY a.source
                 ORDER BY a.published_at DESC, a.id DESC
               ) AS rn
        FROM articles a
        WHERE a.source IN (:sources)
      )
      SELECT *
      FROM ranked
      WHERE rn <= :n
      ORDER BY source, published_at DESC, id DESC
      """,
            nativeQuery = true
    )
    List<ArticleEntity> findLatestOfEach(
            @Param("sources") List<String> sources,
            @Param("n") int n
    );
}

上一篇
Day 8|貓咪的持久化 🐾 (下):Flyway 版控、@Table、Entity Lifecycle & Event
下一篇
Day 10 | 貓言貓語:認識 Message Queue
系列文
Spring 冒險日記:六邊形架構、DDD 與微服務整合10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言