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
JpaRepositoryKULLANMIYORUZ — o H19'da gelecek. Burada repository'leriEntityManagerile elle yazıyoruz (persist,find,createQuery).
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 BorrowBorrow(id, member, book, borrowDate) — iki@ManyToOne
@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)
- 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/veapplication.propertieshazır — dokunma.repository/altındaki// TODO N:yorumlarını çöz.
- WriterRepository (TODO 1-2):
save(persist),findById(find). - BookRepository (TODO 3-7): save, findById,
findAll(JPQL),findByIsbn(parametreli JPQL),findByWriterId(@ManyToManyüzerinde JOIN). - MemberRepository (TODO 8-9): save, findById.
- BorrowRepository (TODO 10-13): save, findById,
findByMemberId(@ManyToOneJPQL),countByBookId(aggregate COUNT).
💡
persistyeni entity'yi kaydeder,@GeneratedValueid'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ç beklerkengetSingleResult(), liste içingetResultList().@Transactionalsınıf üstünde hazır.
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=trueayarı sorunları çözer.
Takılırsan "Çözümü Göster" butonu (3 gün sonra açılır). LibraryJpaTest'teki "beklenen/gelen" en iyi ipucu.