Quantcast
Channel: Serge Ndong – techscouting through the java news
Viewing all articles
Browse latest Browse all 31

JPA 2.0 Criteria API How To – Join Type und Fetch Join

$
0
0

Das JPA-Citeria API ermöglicht eine standardisierte und typsichere Erstellung von objektorientierten Abfragen in Java. Dieser Beitrag erläutert wie Join-Abfragen beeinflusst werden können.

Die Join Methode macht zwar per default einen „inner join“, dieses Verhalten lässt sich jedoch durch die Übergabe eines JoinType Objektes an die Join-Methode beeinflussen .
Unser bekanntes Beispiel für ein Join durch eine CriteriaQuery wird dazu wie folgt angepasst:

EntityManager em = entityManagerFactory.createEntityManager();
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Person.class);
Root person = criteriaQuery.from(Person.class);

// Join-Methode wird ein JoinType zur Steuerung übergeben
SetJoin adresses = person.join(Person_.adresses, JoinType.LEFT);
criteriaQuery
	.select(person)
	.where(
		criteriaBuilder.equal(adresses.get(Address_.street), "Weinheimer str.")
	);
criteriaQuery.select(person);
		
List resultList = em.createQuery(criteriaQuery).getResultList();

Die obige Abfrage würde in JPQL wie folgt ausehen:

select p from Person p left join p.adresses a where a.street = 'Weinheimer str.';

Ein Fetch Join wird durch den Aufruf der fetch-Methode erreicht. Die fetch-Methode lässt sich an einem Root- oder Join-Object aufrufen. Die Methode sorgt dafür, dass alle referenzierten Attribute oder Assoziationen in der Abfrage geladen werden.

EntityManager em = entityManagerFactory.createEntityManager();
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Person.class);
Root person = criteriaQuery.from(Person.class);
person.fetch(Person_.adresses);
criteriaQuery.select(person);
		
List resultList = em.createQuery(criteriaQuery).getResultList();

Das äquivalente JPQL Statement sieht wie folgt aus:

select p from Person p join fetch p.adresses

Einsortiert unter:Java EE, Java Persistence Tagged: Criteria, Hibernate, inner join, join, JPA 2.0, left join, persistence

Viewing all articles
Browse latest Browse all 31

Trending Articles