@Override public void applyMapping(SelectBuilder<?> queryBuilder, ParameterHolder<?> parameterHolder, Map<String, Object> optionalParameters, EmbeddingViewJpqlMacro embeddingViewJpqlMacro) { String oldEmbeddingViewPath = embeddingViewJpqlMacro.getEmbeddingViewPath(); embeddingViewJpqlMacro.setEmbeddingViewPath(embeddingViewPath); FullQueryBuilder<?, ?> fullQueryBuilder; if (queryBuilder instanceof ConstrainedSelectBuilder) { fullQueryBuilder = ((ConstrainedSelectBuilder) queryBuilder).getQueryBuilder(); } else { fullQueryBuilder = (FullQueryBuilder<?, ?>) queryBuilder; } CorrelationBuilder correlationBuilder = new JoinCorrelationBuilder(queryBuilder, fullQueryBuilder, joinBase, correlationAlias, correlationResult, alias); provider.applyCorrelation(correlationBuilder, correlationBasis); if (fetches.length != 0) { for (int i = 0; i < fetches.length; i++) { fullQueryBuilder.fetch(correlationBuilder.getCorrelationAlias() + "." + fetches[i]); } } embeddingViewJpqlMacro.setEmbeddingViewPath(oldEmbeddingViewPath); }
@Override public TupleTransformer create(ParameterHolder<?> parameterHolder, Map<String, Object> optionalParameters, EntityViewConfiguration entityViewConfiguration) { // TODO: Fix view conversion for correlated attributes somehow // Before, we passed a FullQueryBuilder instead of a ParameterHolder but that doesn't work for view conversion // I'm not yet sure how view conversion could work with correlations, but casting the parameter holder here isn't very nice // For now it's ok, but at some point we will want to support correlated attributes somehow and need to think of a fallback solution here if (parameterHolder instanceof FullQueryBuilder<?, ?>) { FullQueryBuilder<?, ?> queryBuilder = (FullQueryBuilder<?, ?>) parameterHolder; CorrelationProvider provider = correlationProviderFactory.create(parameterHolder, optionalParameters); JoinCorrelationBuilder correlationBuilder = new JoinCorrelationBuilder(queryBuilder, queryBuilder, joinBase, correlationAlias, correlationResult, null); EmbeddingViewJpqlMacro embeddingViewJpqlMacro = entityViewConfiguration.getEmbeddingViewJpqlMacro(); String oldEmbeddingViewPath = embeddingViewJpqlMacro.getEmbeddingViewPath(); embeddingViewJpqlMacro.setEmbeddingViewPath(embeddingViewPath); provider.applyCorrelation(correlationBuilder, correlationBasis); embeddingViewJpqlMacro.setEmbeddingViewPath(oldEmbeddingViewPath); if (fetches.length != 0) { for (int i = 0; i < fetches.length; i++) { queryBuilder.fetch(correlationBuilder.getCorrelationAlias() + "." + fetches[i]); } } ObjectBuilder<Object[]> objectBuilder = template.createObjectBuilder(parameterHolder, optionalParameters, entityViewConfiguration, 0, true, false); return new CorrelatedSubviewJoinTupleTransformer(template, objectBuilder); } else { throw new UnsupportedOperationException("Converting views with correlated attributes isn't supported!"); } }
@Override public void applyMapping(SelectBuilder<?> queryBuilder, ParameterHolder<?> parameterHolder, Map<String, Object> optionalParameters, EmbeddingViewJpqlMacro embeddingViewJpqlMacro) { String oldEmbeddingViewPath = embeddingViewJpqlMacro.getEmbeddingViewPath(); embeddingViewJpqlMacro.setEmbeddingViewPath(embeddingViewPath); FullQueryBuilder<?, ?> fullQueryBuilder; if (queryBuilder instanceof ConstrainedSelectBuilder) { fullQueryBuilder = ((ConstrainedSelectBuilder) queryBuilder).getQueryBuilder(); } else { fullQueryBuilder = (FullQueryBuilder<?, ?>) queryBuilder; } CorrelationBuilder correlationBuilder = new JoinCorrelationBuilder(queryBuilder, fullQueryBuilder, joinBase, correlationAlias, correlationResult, alias); providerFactory.create(parameterHolder, optionalParameters).applyCorrelation(correlationBuilder, correlationBasis); if (fetches.length != 0) { for (int i = 0; i < fetches.length; i++) { fullQueryBuilder.fetch(correlationBuilder.getCorrelationAlias() + "." + fetches[i]); } } embeddingViewJpqlMacro.setEmbeddingViewPath(oldEmbeddingViewPath); }
if (fetches.length != 0) { for (int i = 0; i < fetches.length; i++) { criteriaBuilder.fetch(correlationBuilder.getCorrelationAlias() + "." + fetches[i]);