Skip to content

Code2Work/fullstack-backend-project-10

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kütüphane JPA

Amaç

H15'te bellekte tuttuğun kütüphane modelini JPA/Hibernate ile veritabanına taşıyacaksın. @Entity sınıfları + ilişkiler (@ManyToMany, @OneToMany, @ManyToOne) tanımlanmış olarak verildi; sen repository katmanını EntityManager ile yazacaksın (kaydet/getir/JPQL). Süre: ~5-7 saat.

Bu projede Spring Data JpaRepository KULLANMIYORUZ — o H19'da gelecek. Burada repository'leri EntityManager ile elle yazıyoruz (persist, find, createQuery).

Veri Modeli (entity'ler hazır — incele)

Book  ──< @ManyToMany >──  Writer        (bir kitabın çok yazarı, bir yazarın çok kitabı)
Member ──< @OneToMany >── Borrow ──> Book / Member   (@ManyToOne)
  • Book (id, isbn, title, publicationYear) — @ManyToMany Writer (owning side, @JoinTable)
  • Writer (id, name) — @ManyToMany(mappedBy) (inverse side)
  • Member (id, name) — @OneToMany Borrow
  • Borrow (id, member, book, borrowDate) — iki @ManyToOne

Öğrenme Hedefleri

  • @Entity, @Id, @GeneratedValue, @Column (entity'lerde incele)
  • İlişkiler: @ManyToMany + @JoinTable, @OneToMany/@ManyToOne + @JoinColumn
  • Manuel repository: @Repository + @PersistenceContext EntityManager
  • em.persist() (kaydet), em.find() (getir)
  • JPQL: em.createQuery("SELECT b FROM Book b ...", Book.class), parametre (:isbn), JOIN, aggregate (COUNT)

Başlamadan Önce

  • Java 17 veya 21 + Maven 3.9+.
  • Veritabanı: gömülü H2 (kurulum yok; testler bunda çalışır). Derste PostgreSQL gördünüz — JPA kodu DB'den bağımsız çalışır.
  • entity/ ve application.properties hazır — dokunma. repository/ altındaki // TODO N: yorumlarını çöz.

Adım Adım Görevler (repository/)

  1. WriterRepository (TODO 1-2): save (persist), findById (find).
  2. BookRepository (TODO 3-7): save, findById, findAll (JPQL), findByIsbn (parametreli JPQL), findByWriterId (@ManyToMany üzerinde JOIN).
  3. MemberRepository (TODO 8-9): save, findById.
  4. BorrowRepository (TODO 10-13): save, findById, findByMemberId (@ManyToOne JPQL), countByBookId (aggregate COUNT).

💡 persist yeni entity'yi kaydeder, @GeneratedValue id'yi DB atar. JPQL tablo değil entity üzerinde çalışır (FROM Book b, kolon değil alan adı). Parametre: .setParameter("isbn", isbn). Tek sonuç beklerken getSingleResult(), liste için getResultList(). @Transactional sınıf üstünde hazır.

Testler ve Skor

13 test var (LibraryJpaTest@DataJpaTest, gömülü H2). Testleri çalıştırınca skorun otomatik Kaizu paneline işlenir.

1. student_id.txt dosyasına Kaizu öğrenci numaranı yaz. 2. mvn test (ya da ./run-tests.sh). 3. Testler bitince skorun otomatik gider; 13/13 olunca panelde yeşil tik.

Not (JDK): Java 21 hedefler; çok yeni JDK'da surefire net.bytebuddy.experimental=true ayarı sorunları çözer.

Çözüm

Takılırsan "Çözümü Göster" butonu (3 gün sonra açılır). LibraryJpaTest'teki "beklenen/gelen" en iyi ipucu.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages