Küçük bir e-ticaret veri modelini JPA/Hibernate ile kuracaksın. @Entity sınıfları + ilişkiler (@OneToMany, @ManyToOne) hazır verildi; sen repository katmanını EntityManager ile yazacaksın (kaydet/getir/JPQL + aggregate). Süre: ~5-7 saat.
Spring Data
JpaRepositoryKULLANMIYORUZ (H19) — repository'leriEntityManagerile elle yazıyoruz.
Customer ──< @OneToMany >── Order ──< @OneToMany >── OrderItem ──> Product
│ │
(@ManyToOne) (@ManyToOne ×2)
Customer(id, name, email) —@OneToMany OrderOrder(id, customer, orderDate) —@ManyToOne Customer,@OneToMany OrderItemProduct(id, name, price)OrderItem(id, order, product, quantity) — Order↔Product n-n ara tablosu (ek alan: quantity)
@Entity,@Id,@GeneratedValue,@Column,@Table- İlişkiler:
@OneToMany/@ManyToOne+@JoinColumn, n-n'in ara tablo (OrderItem) ile modellenmesi - Manuel repository:
@Repository+EntityManager(persist,find) - JPQL: parametreli sorgu, ilişki üzerinden filtre (
o.customer.id), aggregate (SUM)
- Java 17/21 + Maven 3.9+. Veritabanı: gömülü H2 (kurulum yok).
entity/veapplication.propertieshazır — dokunma.repository/altındaki// TODO N:yorumlarını çöz.
- CustomerRepository (TODO 1-3): save, findById, findAll (JPQL).
- ProductRepository (TODO 4-5): save, findById.
- OrderRepository (TODO 6-8): save, findById,
findByCustomerId(@ManyToOneJPQL). - OrderItemRepository (TODO 9-11): save,
totalRevenue(SUM fiyat×adet),totalQuantitySold(SUM + WHERE).
💡 JPQL aggregate:
SELECT SUM(oi.product.price * oi.quantity) FROM OrderItem oi. İlişki üzerinden alan:oi.product.price,o.customer.id.SUMboş tablodanulldöner —nulliseBigDecimal.ZERO/0döndür.@Transactionalhazır.
13 test var (EcommerceTest — @DataJpaTest, gömülü H2). 1. student_id.txt'ye numaranı yaz. 2. mvn test. 3. 13/13 olunca panelde yeşil tik (skor otomatik gider).
Takılırsan "Çözümü Göster" (3 gün sonra). EcommerceTest'teki "beklenen/gelen" en iyi ipucu.