2012-06-14 10 views

cevap

5

:

List<T> results = em.createQuery("SELECT t FROM TABLE t", T.class) 
         .getResultList(); 

parametrelerle:

List<T> results = em.createQuery("SELECT t FROM TABLE t where t.value = :value1") 
         .setParameter("value1", "some value").getResultList(); 

tek sonuç için getSingleResult() ile getResultList() değiştirin:

T entity = em.createQuery("SELECT t FROM TABLE t where t.uniqueKey = :value1") 
       .setParameter("value1", "KEY1").getSingleResult(); 

bir diğer yolu Kriterlerini API kullanmaktır .

+2

Cevabınız için teşekkür ederiz. Bunu bir sorgu ile yapabileceğimi biliyordum, sadece "EntityManager.find()" gibi) JPA yöntemini kullanarak daha az kod ile daha hızlı yapabilir miyim diye merak ediyordum. – Rox

7

TypedQuery ile uygun JPQL'yi kullanabilirsiniz.

try { 
    TypedQuery<Bean> tq = em.createQuery("from Bean WHERE column=?", Bean.class); 
    Bean result = tq.setParameter(1, "uniqueKey").getSingleResult(); 
} catch(NoResultException noresult) { 
    // if there is no result 
} catch(NonUniqueResultException notUnique) { 
    // if more than one result 
} 
+0

Teşekkürler! TypedQuery'yi daha önce kullanmadım. Kontrol edeceğim! – Rox

2

Bir Sorgu, JPQL, Ölçüt veya SQL kullanabilirsiniz.

Endişenizin, find() ile benzer önbellek vuruşlarını elde edip etmediğinden emin değilsiniz. EclipseLink'de, birincil olmayan anahtar alanlarını dizine eklemenize ve JPQL veya Kriterlerden önbellek isabetleri almanıza olanak sağlamak için 2.4 önbellek dizinleri eklenmiştir.

See, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Indexes

önce 2.4'e olmayan id alanları üzerinde önbellek sorgulamak için bellek içi sorguları kullanabilirsiniz.