org.hibernate.query.sqm.tree.select.SqmDynamicInstantiation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core Show documentation
Show all versions of hibernate-core Show documentation
Hibernate's core ORM functionality
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.query.sqm.tree.select;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import org.hibernate.query.DynamicInstantiationNature;
import org.hibernate.query.criteria.JpaCompoundSelection;
import org.hibernate.query.criteria.JpaSelection;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SemanticQueryWalker;
import org.hibernate.query.sqm.tree.expression.SqmExpression;
import org.hibernate.query.sqm.tree.jpa.AbstractJpaSelection;
import org.hibernate.query.sqm.sql.internal.DomainResultProducer;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
import org.jboss.logging.Logger;
import static org.hibernate.query.DynamicInstantiationNature.CLASS;
import static org.hibernate.query.DynamicInstantiationNature.LIST;
import static org.hibernate.query.DynamicInstantiationNature.MAP;
/**
* Represents a dynamic instantiation ({@code select new XYZ(...) ...}) as part of the SQM.
*
* @author Steve Ebersole
*/
public class SqmDynamicInstantiation
extends AbstractJpaSelection
implements SqmSelectableNode,
SqmAliasedExpressionContainer,
JpaCompoundSelection,
DomainResultProducer {
private static final Logger log = Logger.getLogger( SqmDynamicInstantiation.class );
public static SqmDynamicInstantiation forClassInstantiation(
JavaTypeDescriptor targetJavaType,
NodeBuilder nodeBuilder) {
//noinspection unchecked
return new SqmDynamicInstantiation(
new DynamicInstantiationTargetImpl( CLASS, targetJavaType ),
nodeBuilder
);
}
public static SqmDynamicInstantiation forClassInstantiation(
Class targetJavaType,
NodeBuilder nodeBuilder) {
//noinspection unchecked
return forClassInstantiation(
nodeBuilder.getTypeConfiguration().getJavaTypeDescriptorRegistry().getDescriptor( targetJavaType ),
nodeBuilder
);
}
public static SqmDynamicInstantiation forMapInstantiation(
JavaTypeDescriptor