JDBC ResultSet Eşleme ile JPA Criteria API Karşılaştırması
Dinamik sorgular için manuel JDBC ResultSet eşlemesini JPA'nın tür-güvenli Criteria API'siyle değiştirin.
String sql = "SELECT * FROM users"
+ " WHERE status = ? AND age > ?";
try (Connection con = ds.getConnection();
PreparedStatement ps =
con.prepareStatement(sql)) {
ps.setString(1, status);
ps.setInt(2, minAge);
ResultSet rs = ps.executeQuery();
List<User> users = new ArrayList<>();
while (rs.next()) {
User u = new User();
u.setId(rs.getLong("id"));
u.setName(rs.getString("name"));
u.setAge(rs.getInt("age"));
users.add(u);
}
}
@PersistenceContext
EntityManager em;
public List<User> findActiveAboveAge(
String status, int minAge) {
var cb = em.getCriteriaBuilder();
var cq =
cb.createQuery(User.class);
var root = cq.from(User.class);
cq.select(root).where(
cb.equal(root.get("status"), status),
cb.greaterThan(root.get("age"), minAge));
return em.createQuery(cq).getResultList();
}
Tür-güvenli sorgular
Criteria oluşturucusu, alan adı ve tür uyumsuzluklarını derleme zamanında yakalar.
Otomatik eşleme
JPA, sonuç satırlarını entity nesnelerine eşler — sütun bazında manuel çıkarma yok.
Birleştirilebilir koşullar
Dinamik where koşulları, and(), or() ve yeniden kullanılabilir Predicate nesneleriyle temiz biçimde oluşturulur.
Jakarta EE 8 / Java 11'den itibaren geniş çapta kullanılabilir
Ham JDBC, SQL dizilerinin oluşturulmasını, parametrelerin dizine göre ayarlanmasını ve her ResultSet sütununun manuel olarak eşlenmesini gerektirir — bu süreç hata eğilimlidir ve sütunlar değiştiğinde sessizce bozulur. JPA Criteria API, tür-güvenli bir oluşturucu deseni kullanarak sorguları programatik olarak oluşturur. Sütun adları entity modeline göre doğrulanır, sonuç eşlemesi otomatik yapılır ve karmaşık dinamik sorgular dize birleştirme olmadan temiz biçimde oluşturulur.