org.hibernate.query.sqm.sql.internal.SqmMapEntryResult Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core-jakarta Show documentation
Show all versions of hibernate-core-jakarta Show documentation
Hibernate O/RM implementation of the Jakarta Persistence specification
The newest version!
/*
* 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.sql.internal;
import java.util.Map;
import org.hibernate.sql.results.graph.AssemblerCreationState;
import org.hibernate.sql.results.graph.DomainResult;
import org.hibernate.sql.results.graph.DomainResultAssembler;
import org.hibernate.sql.results.jdbc.spi.JdbcValuesSourceProcessingOptions;
import org.hibernate.sql.results.jdbc.spi.RowProcessingState;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
/**
* @author Steve Ebersole
*/
public class SqmMapEntryResult> implements DomainResult {
private final DomainResult keyResult;
private final DomainResult valueResult;
private final JavaTypeDescriptor javaTypeDescriptor;
private final String alias;
public SqmMapEntryResult(
DomainResult keyResult,
DomainResult valueResult,
String alias,
JavaTypeDescriptor javaTypeDescriptor) {
this.alias = alias;
this.keyResult = keyResult;
this.valueResult = valueResult;
this.javaTypeDescriptor = javaTypeDescriptor;
}
@Override
public String getResultVariable() {
return alias;
}
@Override
public DomainResultAssembler createResultAssembler(AssemblerCreationState creationState) {
final DomainResultAssembler keyAssembler = keyResult.createResultAssembler( creationState );
final DomainResultAssembler valueAssembler = valueResult.createResultAssembler( creationState );
return new DomainResultAssembler() {
@Override
public R assemble(RowProcessingState rowProcessingState, JdbcValuesSourceProcessingOptions options) {
final K key = keyAssembler.assemble( rowProcessingState, options );
final V value = valueAssembler.assemble( rowProcessingState, options );
//noinspection unchecked
return (R) new MapEntryImpl<>( key, value );
}
@Override
public JavaTypeDescriptor getAssembledJavaTypeDescriptor() {
return javaTypeDescriptor;
}
};
}
@Override
public JavaTypeDescriptor getResultJavaTypeDescriptor() {
return javaTypeDescriptor;
}
public static class MapEntryImpl implements Map.Entry {
private final K key;
private final V value;
public MapEntryImpl(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public K getKey() {
return key;
}
@Override
public V getValue() {
return value;
}
@Override
public V setValue(V value) {
throw new UnsupportedOperationException();
}
}
}