Source profileQuality 66/100

affaan-m/ECC/docs/tr/skills/jpa-patterns/SKILL.md

jpa-patterns

Spring Boot'ta entity tasarımı, ilişkiler, sorgu optimizasyonu, transaction'lar, auditing, indeksleme, sayfalama ve pooling için JPA/Hibernate kalıpları.

Source repository stars
234,327
Declared platforms
0
Static risk flags
0
Last source update
2026-07-27
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Spring Boot'ta veri modelleme, repository'ler ve performans ayarlaması için kullanın.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/affaan-m/ECC --skill "docs/tr/skills/jpa-patterns"
    Safe inspection promptEditorial

    Inspect the Agent Skill "jpa-patterns" from https://github.com/affaan-m/ECC/blob/4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38/docs/tr/skills/jpa-patterns/SKILL.md at commit 4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Ne Zaman Aktifleştirmeli

      JPA entity'leri ve tablo eşlemelerini tasarlarken

      JPA entity'leri ve tablo eşlemelerini tasarlarkenİlişkileri tanımlarken (@OneToMany, @ManyToOne, @ManyToMany)Sorguları optimize ederken (N+1 önleme, fetch stratejileri, projections)
    2. 02

      Entity Tasarımı

      Review the “Entity Tasarımı” section in the pinned source before continuing.

      Review and apply the “Entity Tasarımı” source section.
    3. 03

      İlişkiler ve N+1 Önleme

      Varsayılan olarak lazy loading; gerektiğinde sorgularda JOIN FETCH kullan

      Varsayılan olarak lazy loading; gerektiğinde sorgularda JOIN FETCH kullanKoleksiyonlarda EAGER kullanmaktan kaçın; okuma yolları için DTO projections kullan- Varsayılan olarak lazy loading; gerektiğinde sorgularda JOIN FETCH kullan - Koleksiyonlarda EAGER kullanmaktan kaçın; okuma yolları için DTO projections kullan
    4. 04

      Repository Kalıpları

      Hafif sorgular için projections kullan:

      Hafif sorgular için projections kullan:- Hafif sorgular için projections kullan:
    5. 05

      Transaction'lar

      Servis metodlarını @Transactional ile işaretle

      Servis metodlarını @Transactional ile işaretleOkuma yollarını optimize etmek için @Transactional(readOnly = true) kullanPropagation'ı dikkatle seç; uzun süreli transaction'lardan kaçın

    Permission review

    Static risk signals and limitations

    No configured static risk pattern was detected

    This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score66/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars234,327SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    affaan-m/ECC
    Skill path
    docs/tr/skills/jpa-patterns/SKILL.md
    Commit
    4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    JPA/Hibernate Kalıpları

    Spring Boot'ta veri modelleme, repository'ler ve performans ayarlaması için kullanın.

    Ne Zaman Aktifleştirmeli

    • JPA entity'leri ve tablo eşlemelerini tasarlarken
    • İlişkileri tanımlarken (@OneToMany, @ManyToOne, @ManyToMany)
    • Sorguları optimize ederken (N+1 önleme, fetch stratejileri, projections)
    • Transaction'ları, auditing'i veya soft delete'leri yapılandırırken
    • Sayfalama, sıralama veya özel repository metodları kurarken
    • Connection pooling (HikariCP) veya second-level caching ayarlarken

    Entity Tasarımı

    @Entity
    @Table(name = "markets", indexes = {
      @Index(name = "idx_markets_slug", columnList = "slug", unique = true)
    })
    @EntityListeners(AuditingEntityListener.class)
    public class MarketEntity {
      @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
    
      @Column(nullable = false, length = 200)
      private String name;
    
      @Column(nullable = false, unique = true, length = 120)
      private String slug;
    
      @Enumerated(EnumType.STRING)
      private MarketStatus status = MarketStatus.ACTIVE;
    
      @CreatedDate private Instant createdAt;
      @LastModifiedDate private Instant updatedAt;
    }
    

    Auditing'i etkinleştir:

    @Configuration
    @EnableJpaAuditing
    class JpaConfig {}
    

    İlişkiler ve N+1 Önleme

    @OneToMany(mappedBy = "market", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<PositionEntity> positions = new ArrayList<>();
    
    • Varsayılan olarak lazy loading; gerektiğinde sorgularda JOIN FETCH kullan
    • Koleksiyonlarda EAGER kullanmaktan kaçın; okuma yolları için DTO projections kullan
    @Query("select m from MarketEntity m left join fetch m.positions where m.id = :id")
    Optional<MarketEntity> findWithPositions(@Param("id") Long id);
    

    Repository Kalıpları

    public interface MarketRepository extends JpaRepository<MarketEntity, Long> {
      Optional<MarketEntity> findBySlug(String slug);
    
      @Query("select m from MarketEntity m where m.status = :status")
      Page<MarketEntity> findByStatus(@Param("status") MarketStatus status, Pageable pageable);
    }
    
    • Hafif sorgular için projections kullan:
    public interface MarketSummary {
      Long getId();
      String getName();
      MarketStatus getStatus();
    }
    Page<MarketSummary> findAllBy(Pageable pageable);
    

    Transaction'lar

    • Servis metodlarını @Transactional ile işaretle
    • Okuma yollarını optimize etmek için @Transactional(readOnly = true) kullan
    • Propagation'ı dikkatle seç; uzun süreli transaction'lardan kaçın
    @Transactional
    public Market updateStatus(Long id, MarketStatus status) {
      MarketEntity entity = repo.findById(id)
          .orElseThrow(() -> new EntityNotFoundException("Market"));
      entity.setStatus(status);
      return Market.from(entity);
    }
    

    Sayfalama

    PageRequest page = PageRequest.of(pageNumber, pageSize, Sort.by("createdAt").descending());
    Page<MarketEntity> markets = repo.findByStatus(MarketStatus.ACTIVE, page);
    

    Cursor benzeri sayfalama için, sıralama ile birlikte JPQL'de id > :lastId ekle.

    İndeksleme ve Performans

    • Yaygın filtreler için indeksler ekle (status, slug, foreign key'ler)
    • Sorgu kalıplarına uyan composite indeksler kullan (status, created_at)
    • select * kullanmaktan kaçın; sadece gerekli sütunları project et
    • saveAll ve hibernate.jdbc.batch_size ile yazmaları batch'le

    Connection Pooling (HikariCP)

    Önerilen özellikler:

    spring.datasource.hikari.maximum-pool-size=20
    spring.datasource.hikari.minimum-idle=5
    spring.datasource.hikari.connection-timeout=30000
    spring.datasource.hikari.validation-timeout=5000
    

    PostgreSQL LOB işleme için ekle:

    spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
    

    Caching

    • 1st-level cache EntityManager başına; transaction'lar arası entity'leri tutmaktan kaçın
    • Okuma ağırlıklı entity'ler için second-level cache'i dikkatle düşün; eviction stratejisini doğrula

    Migration'lar

    • Flyway veya Liquibase kullan; üretimde Hibernate auto DDL'ye asla güvenme
    • Migration'ları idempotent ve ekleyici tut; plan olmadan sütun kaldırmaktan kaçın

    Veri Erişimi Testi

    • Üretimi yansıtmak için Testcontainers ile @DataJpaTest tercih et
    • Logları kullanarak SQL verimliliğini assert et: parametre değerleri için logging.level.org.hibernate.SQL=DEBUG ve logging.level.org.hibernate.orm.jdbc.bind=TRACE ayarla

    Hatırla: Entity'leri yalın, sorguları kasıtlı ve transaction'ları kısa tut. Fetch stratejileri ve projections ile N+1'i önle, ve okuma/yazma yolların için indeksle.

    Alternatives

    Compare before choosing