2012-06-14 2 views

Antwort

5

Zum Beispiel wie folgt aus:

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

Mit den Parametern:

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

Für einzelnes Ergebnis ersetzen getResultList() mit getSingleResult():

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

Eine andere Möglichkeit ist Criteria API zu verwenden .

+2

Vielen Dank für Ihre Antwort. Ich wusste, dass ich es mit einer Abfrage machen könnte, ich habe mich nur gefragt, ob ich es mit weniger Code schneller machen könnte, indem ich eine Methode der JPA benutze, wie 'EntityManager.find()'. – Rox

7

Sie können entsprechende JPQL mit TypedQuery verwenden.

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

Danke! Ich habe TypedQuery zuvor nicht verwendet. Ich werde es mir ansehen! – Rox

2

Sie können eine Abfrage verwenden, entweder JPQL, Kriterien oder SQL.

Nicht sicher, ob es Ihr Anliegen ist, Cache-Treffer ähnlich wie find() zu erhalten. In EclipseLink 2.4 wurden Cache-Indizes hinzugefügt, mit denen Sie Nicht-Primärschlüsselfelder indizieren und Cache-Treffer aus JPQL oder Kriterien abrufen können.

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

Vor 2.4 können Sie im Speicher-Abfragen verwenden den Cache auf Nicht-ID-Felder abzufragen.