Der Knackpunkt is dieser:
Mit
Root<TabelleA> root = query.from(TabelleA.class)
wird die Ausgangstabelle (root) bezeichnet.
Mit
Join<TabelleA, TablleB> join = root.join(TabelleA.bRef);
wir HealthCheck hinzu ge-joined.
Wichig Referenzen (z.B. der Filter auf das Feld feldXY) müssen nun von join aus gehen:
join.get(TablleB.feldXY)
Oder die ganze Where-Clause:
.where(criteriaBuilder.equal(root.get(TabelleA.id), "id000001"), criteriaBuilder.like( join.get(TablleB.feldXY), "%gesuchterInhalt%"))
Ganze Beispiel
CriteriaBuilder criteriaBuilder = ippDaoProvider.getEntityManager().getCriteriaBuilder(); CriteriaQuery<TabelleA> query = criteriaBuilder.createQuery(TabelleA.class); Root<TabelleA> root = query.from(TabelleA.class); Join<TabelleA, TablleB> join = root.join(TabelleA.bRef); String healthCheckType = "BelowInvest"; query.select(root).where(criteriaBuilder.equal(root.get(TabelleA.id), "id000001"), criteriaBuilder.like( join.get(TablleB.feldXY), "%gesuchterInhalt%")); List<TabelleA> aList = ippDaoProvider.getHealthCheckExecutionDao().find(query);