@Override public boolean supportsRootTreat() { return jpaProvider.supportsRootTreat(); }
if (renderTreat) { sb.append("TREAT("); renderAlias(sb, joinBase.getJoinNode(), mainQuery.jpaProvider.supportsRootTreat(), externalRepresentation); sb.append('.'); sb.append(node.getCorrelationPath());
protected String treatRoot(String path, Class<?> type, String property) { if (jpaProvider.supportsRootTreat()) { return "TREAT(" + path + " AS " + type.getSimpleName() + ")." + property; } else if (jpaProvider.supportsSubtypePropertyResolving()) { return path + "." + property; } throw new IllegalArgumentException("Treat should not be used as the JPA provider does not support subtype property access!"); }
protected String treatRoot(String path, Class<?> type, String property) { if (jpaProvider.supportsRootTreat()) { return "TREAT(" + path + " AS " + type.getSimpleName() + ")." + property; } else if (jpaProvider.supportsSubtypePropertyResolving()) { return path + "." + property; } throw new IllegalArgumentException("Treat should not be used as the JPA provider does not support subtype property access!"); }
protected String treatRootWhereFragment(String alias, Class<?> treatType, String after, boolean negatedContext) { String operator; String logicalOperator; String predicate; if (negatedContext) { operator = " = "; logicalOperator = " AND "; } else { operator = " <> "; logicalOperator = " OR "; } if (jpaProvider.supportsRootTreat()) { predicate = "TREAT(" + alias + " AS " + treatType.getSimpleName() + ")" + after; } else if (jpaProvider.supportsSubtypePropertyResolving()) { predicate = alias + after; } else { throw new IllegalArgumentException("Treat should not be used as the JPA provider does not support subtype property access!"); } return "(TYPE(" + alias + ")" + operator + treatType.getSimpleName() + logicalOperator + predicate + ")"; }
protected String treatRootWhereFragment(String alias, Class<?> treatType, String after, boolean negatedContext) { String operator; String logicalOperator; String predicate; if (negatedContext) { operator = " = "; logicalOperator = " AND "; } else { operator = " <> "; logicalOperator = " OR "; } if (jpaProvider.supportsRootTreat()) { predicate = "TREAT(" + alias + " AS " + treatType.getSimpleName() + ")" + after; } else if (jpaProvider.supportsSubtypePropertyResolving()) { predicate = alias + after; } else { throw new IllegalArgumentException("Treat should not be used as the JPA provider does not support subtype property access!"); } return "(TYPE(" + alias + ")" + operator + treatType.getSimpleName() + logicalOperator + predicate + ")"; }
@Override public void visit(TreatExpression expression) { if (jpaProvider.supportsRootTreat()) { super.visit(expression); } else if (jpaProvider.supportsSubtypePropertyResolving()) { // NOTE: this might be wrong when having multiple same named properties expression.getExpression().accept(this); } else { throw new IllegalArgumentException("Can not render treat expression[" + expression.toString() + "] as the JPA provider does not support it!"); } }
boolean renderTreat = jpaProvider.supportsRootTreat();