Kann ich Kriterienabfragen mit EJB3-Entitäten verwenden? Wenn ja, wie kann ich sie mit EntityManager kombinieren?Kriterienabfragen in EJB 3
Antwort
JPA bietet keine Kriterien-API wie in Hibernate. Sie können jedoch ejb3criteria verwenden, eine Bibliothek, die eine API basierend auf dem Hibernate Criteria API-Design für EJB3 Persistence bereitstellt. ejb3criteria kann mit jeder EJB3 Persistence-Implementierung verwendet werden.
Eine der neuen Funktionen in der JPA 2.0 ist die Kriterien-API. Sie benötigen eine der JPA2 Implementierungen:
- Hibernate 3.5 jetzt hat JPA2 Unterstützung
- EclipseLink (Referenz JPA2 Implementierung)
- Apache OpenJPA 2.0
Criteria-Abfragen über die EntityManager.getCriteriaBuilder zugegriffen werden() und über die normale Abfrage-API ausgeführt.
EntityManager em = ...;
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Employee> query = qb.createQuery(Employee.class);
Root<Employee> employee = query.from(Employee.class);
query.where(qb.equal(employee.get("firstName"), "Bob"));
List<Employee> result = em.createQuery(query).getResultList();
Wahr. Aber das ist nicht Teil von JPA 1.0/EJB 3.0, worum es in der Frage ging. –
JPA 2 (vorausgesetzt die Kriterien API) wurde in JSR 317 definiert, die als Nachfolger von JSR 220 (die ursprüngliche EJB/JPA-Spezifikation) angesehen werden kann. Daher Ihr Kommentar "True. Aber das ist nicht Teil von JPA 1.0/EJB 3.0, worum es bei der Frage ging." ist irrelevant, da Sie JPA 2 austauschbar auf allen gängigen Anwendungsservern (WebLogic, JBOSS, Glassfish usw.) verwenden können. Grüne Feldprojekte verwenden JPA 2.0 oder höher. Sie werden viele Projekte finden, die mit JPA 1 umgesetzt werden, aber die meisten Unternehmen sind dabei, das JPA 1 Rahmenwerk zu ersetzen.
Danke, es ist genau das, was ich brauche! Hast du es je probiert? – user132371
Versucht, ja; in der Produktion verwendet, nein. Das bedeutet nur, dass ich es nicht stark benutzt habe, aber ich sage nicht "verwende es nicht in der Produktion". –