@Override public boolean supportsTreatJoin() { return jpaProvider.supportsTreatJoin(); }
protected String treatJoinedConstraintFragment(String alias, Class<?> treatType, String after, boolean negatedContext) { if (jpaProvider.supportsTreatJoin()) { return alias + after; } return treatRootWhereFragment(alias, treatType, after, negatedContext); }
protected String treatJoin(String path, Class<?> type) { if (jpaProvider.supportsTreatJoin()) { return "TREAT(" + path + " AS " + type.getSimpleName() + ")"; } else if (jpaProvider.supportsSubtypeRelationResolving()) { return path; } throw new IllegalArgumentException("Treat should not be used as the JPA provider does not support subtype property access!"); }
protected String treatJoinedConstraintFragment(String alias, Class<?> treatType, String after, boolean negatedContext) { if (jpaProvider.supportsTreatJoin()) { return alias + after; } return treatRootWhereFragment(alias, treatType, after, negatedContext); }
protected String treatJoin(String path, Class<?> type) { if (jpaProvider.supportsTreatJoin()) { return "TREAT(" + path + " AS " + type.getSimpleName() + ")"; } else if (jpaProvider.supportsSubtypeRelationResolving()) { return path; } throw new IllegalArgumentException("Treat should not be used as the JPA provider does not support subtype property access!"); }
if (jpaProvider.supportsTreatJoin() && node.isTreatJoinNode()) { continue;
protected String treatRootTreatJoin(JoinType joinType, String path, Class<?> type, String property, Class<?> type2, String alias) { String joinPrefix; if (joinType == JoinType.INNER) { joinPrefix = "JOIN "; } else if (joinType == JoinType.LEFT) { joinPrefix = "LEFT JOIN "; } else if (joinType == JoinType.RIGHT) { joinPrefix = "RIGHT JOIN "; } else { throw new IllegalArgumentException("Invalid join type: " + joinType); } if (jpaProvider.supportsRootTreatTreatJoin()) { return joinPrefix + "TREAT(TREAT(" + path + " AS " + type.getSimpleName() + ")." + property + " AS " + type2.getSimpleName() + ") " + alias; } else if (jpaProvider.supportsSubtypeRelationResolving()) { if (jpaProvider.supportsTreatJoin() && joinType == JoinType.INNER) { String joinPath = joinPrefix + "TREAT(" + path + "." + property + " AS " + type2.getSimpleName() + ") " + alias; JpaProvider.ConstraintType constraintType = jpaProvider.requiresTreatFilter(em.getEntityManagerFactory().getMetamodel().entity(type), property, joinType); if (constraintType == JpaProvider.ConstraintType.ON) { return joinPath + ON_CLAUSE + "TYPE(" + alias + ") = " + type2.getSimpleName(); } else { return joinPath; } } else { return joinPrefix + path + "." + property + " " + alias; } } throw new IllegalArgumentException("Treat should not be used as the JPA provider does not support subtype property access!"); }
protected String treatRootTreatJoin(JoinType joinType, String path, Class<?> type, String property, Class<?> type2, String alias) { String joinPrefix; if (joinType == JoinType.INNER) { joinPrefix = "JOIN "; } else if (joinType == JoinType.LEFT) { joinPrefix = "LEFT JOIN "; } else if (joinType == JoinType.RIGHT) { joinPrefix = "RIGHT JOIN "; } else { throw new IllegalArgumentException("Invalid join type: " + joinType); } if (jpaProvider.supportsRootTreatTreatJoin()) { return joinPrefix + "TREAT(TREAT(" + path + " AS " + type.getSimpleName() + ")." + property + " AS " + type2.getSimpleName() + ") " + alias; } else if (jpaProvider.supportsSubtypeRelationResolving()) { if (jpaProvider.supportsTreatJoin() && joinType == JoinType.INNER) { String joinPath = joinPrefix + "TREAT(" + path + "." + property + " AS " + type2.getSimpleName() + ") " + alias; JpaProvider.ConstraintType constraintType = jpaProvider.requiresTreatFilter(em.getEntityManagerFactory().getMetamodel().entity(type), property, joinType); if (constraintType == JpaProvider.ConstraintType.ON) { return joinPath + ON_CLAUSE + "TYPE(" + alias + ") = " + type2.getSimpleName(); } else { return joinPath; } } else { return joinPrefix + path + "." + property + " " + alias; } } throw new IllegalArgumentException("Treat should not be used as the JPA provider does not support subtype property access!"); }
private boolean renderCorrelationJoinPath(StringBuilder sb, JoinAliasInfo joinBase, JoinNode node, List<String> whereConjuncts, List<String> optionalWhereConjuncts, boolean externalRepresentation) { final boolean renderTreat = mainQuery.jpaProvider.supportsTreatJoin() && (!mainQuery.jpaProvider.supportsSubtypeRelationResolving() || node.getJoinType() == JoinType.INNER); if (mainQuery.jpaProvider.needsCorrelationPredicateWhenCorrelatingWithWhereClause() || node.getTreatType() != null && !renderTreat && !mainQuery.jpaProvider.supportsSubtypeRelationResolving()) {
final boolean renderTreat = mainQuery.jpaProvider.supportsTreatJoin() && (!mainQuery.jpaProvider.supportsSubtypeRelationResolving() || node.getJoinType() == JoinType.INNER); final String onCondition;
if (jpaProvider.supportsTreatJoin() && treatedJoinNode.isTreatJoinNode()) { continue;