mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-28 14:59:12 +00:00
Allow to invoke list() operation also without unique filtering
This commit is contained in:
parent
7b064afbd3
commit
89ebcfbc32
@ -214,7 +214,8 @@ public Callback getCallback() {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
RowTransformerPassThruImpl.instance()
|
||||
RowTransformerPassThruImpl.instance(),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -156,7 +156,8 @@ public Callback getCallback() {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
RowTransformerPassThruImpl.instance()
|
||||
RowTransformerPassThruImpl.instance(),
|
||||
true
|
||||
);
|
||||
|
||||
return session.getPersistenceContext().getCollection( collectionKey );
|
||||
|
@ -94,7 +94,8 @@ public Callback getCallback() {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
RowTransformerPassThruImpl.instance()
|
||||
RowTransformerPassThruImpl.instance(),
|
||||
true
|
||||
);
|
||||
|
||||
final CollectionKey collectionKey = new CollectionKey( attributeMapping.getCollectionDescriptor(), triggerKey );
|
||||
|
@ -251,7 +251,8 @@ public Callback getCallback() {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
RowTransformerPassThruImpl.instance()
|
||||
RowTransformerPassThruImpl.instance(),
|
||||
true
|
||||
);
|
||||
|
||||
if ( list.isEmpty() ) {
|
||||
|
@ -15,7 +15,6 @@
|
||||
|
||||
import org.hibernate.LockMode;
|
||||
import org.hibernate.LockOptions;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
|
||||
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||
@ -339,7 +338,8 @@ public void registerLoadingEntityEntry(EntityKey entityKey, LoadingEntityEntry e
|
||||
}
|
||||
}
|
||||
},
|
||||
RowTransformerPassThruImpl.instance()
|
||||
RowTransformerPassThruImpl.instance(),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -139,7 +139,8 @@ public Callback getCallback() {
|
||||
};
|
||||
}
|
||||
},
|
||||
row -> (T) row[0]
|
||||
row -> (T) row[0],
|
||||
true
|
||||
);
|
||||
|
||||
if ( results.size() > 1 ) {
|
||||
@ -230,7 +231,8 @@ public Callback getCallback() {
|
||||
};
|
||||
}
|
||||
},
|
||||
row -> row
|
||||
row -> row,
|
||||
true
|
||||
);
|
||||
|
||||
if ( results.size() > 1 ) {
|
||||
@ -326,7 +328,8 @@ public Callback getCallback() {
|
||||
};
|
||||
}
|
||||
},
|
||||
row -> row
|
||||
row -> row,
|
||||
true
|
||||
);
|
||||
|
||||
if ( results.size() > 1 ) {
|
||||
|
@ -165,7 +165,8 @@ public Callback getCallback() {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
RowTransformerPassThruImpl.instance()
|
||||
RowTransformerPassThruImpl.instance(),
|
||||
true
|
||||
);
|
||||
|
||||
//noinspection ForLoopReplaceableByForEach
|
||||
|
@ -150,7 +150,8 @@ public Callback getCallback() {
|
||||
};
|
||||
}
|
||||
},
|
||||
RowTransformerPassThruImpl.instance()
|
||||
RowTransformerPassThruImpl.instance(),
|
||||
true
|
||||
);
|
||||
|
||||
if ( list.isEmpty() ) {
|
||||
|
@ -131,7 +131,8 @@ public Callback getCallback() {
|
||||
};
|
||||
}
|
||||
},
|
||||
row -> row[0]
|
||||
row -> row[0],
|
||||
true
|
||||
);
|
||||
|
||||
assert list.size() == 1;
|
||||
@ -215,7 +216,8 @@ public Callback getCallback() {
|
||||
};
|
||||
}
|
||||
},
|
||||
row -> row[0]
|
||||
row -> row[0],
|
||||
true
|
||||
);
|
||||
|
||||
assert list.size() == 1;
|
||||
|
@ -166,7 +166,8 @@ public List<R> performList(ExecutionContext executionContext) {
|
||||
sqmInterpretation.getJdbcSelect(),
|
||||
jdbcParameterBindings,
|
||||
executionContext,
|
||||
rowTransformer
|
||||
rowTransformer,
|
||||
true
|
||||
);
|
||||
}
|
||||
finally {
|
||||
|
@ -226,7 +226,8 @@ public static List<Object> selectMatchingIds(
|
||||
idSelectJdbcOperation,
|
||||
jdbcParameterBindings,
|
||||
executionContext,
|
||||
row -> row
|
||||
row -> row,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -64,10 +64,11 @@ public class JdbcSelectExecutorStandardImpl implements JdbcSelectExecutor {
|
||||
|
||||
@Override
|
||||
public <R> List<R> list(
|
||||
JdbcSelect jdbcSelect,
|
||||
JdbcParameterBindings jdbcParameterBindings,
|
||||
ExecutionContext executionContext,
|
||||
RowTransformer<R> rowTransformer) {
|
||||
JdbcSelect jdbcSelect,
|
||||
JdbcParameterBindings jdbcParameterBindings,
|
||||
ExecutionContext executionContext,
|
||||
RowTransformer<R> rowTransformer,
|
||||
boolean uniqueFilter) {
|
||||
return executeQuery(
|
||||
jdbcSelect,
|
||||
jdbcParameterBindings,
|
||||
@ -77,7 +78,7 @@ public <R> List<R> list(
|
||||
.getJdbcCoordinator()
|
||||
.getStatementPreparer()
|
||||
.prepareStatement( sql ),
|
||||
ListResultsConsumer.instance()
|
||||
ListResultsConsumer.instance(uniqueFilter)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -24,10 +24,11 @@ public interface JdbcSelectExecutor {
|
||||
// todo (6.0) : Ideally we'd have a singular place (JdbcServices? ServiceRegistry?) to obtain these executors
|
||||
|
||||
<R> List<R> list(
|
||||
JdbcSelect jdbcSelect,
|
||||
JdbcParameterBindings jdbcParameterBindings,
|
||||
ExecutionContext executionContext,
|
||||
RowTransformer<R> rowTransformer);
|
||||
JdbcSelect jdbcSelect,
|
||||
JdbcParameterBindings jdbcParameterBindings,
|
||||
ExecutionContext executionContext,
|
||||
RowTransformer<R> rowTransformer,
|
||||
boolean uniqueFilter);
|
||||
|
||||
<R> ScrollableResultsImplementor<R> scroll(
|
||||
JdbcSelect jdbcSelect,
|
||||
|
@ -24,11 +24,18 @@ public class ListResultsConsumer<R> implements ResultsConsumer<List<R>, R> {
|
||||
/**
|
||||
* Singleton access
|
||||
*/
|
||||
public static final ListResultsConsumer INSTANCE = new ListResultsConsumer();
|
||||
private static final ListResultsConsumer UNIQUE_FILTER_INSTANCE = new ListResultsConsumer(true);
|
||||
private static final ListResultsConsumer NORMAL_INSTANCE = new ListResultsConsumer(false);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <R> ListResultsConsumer<R> instance() {
|
||||
return INSTANCE;
|
||||
public static <R> ListResultsConsumer<R> instance(boolean uniqueFilter) {
|
||||
return uniqueFilter ? UNIQUE_FILTER_INSTANCE : NORMAL_INSTANCE;
|
||||
}
|
||||
|
||||
private final boolean uniqueFilter;
|
||||
|
||||
public ListResultsConsumer(boolean uniqueFilter) {
|
||||
this.uniqueFilter = uniqueFilter;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -44,7 +51,7 @@ public List<R> consume(
|
||||
|
||||
boolean uniqueRows = false;
|
||||
final Class<R> resultJavaType = rowReader.getResultJavaType();
|
||||
if ( resultJavaType != null && ! resultJavaType.isArray() ) {
|
||||
if ( uniqueFilter && resultJavaType != null && ! resultJavaType.isArray() ) {
|
||||
final EntityPersister entityDescriptor = session.getFactory().getMetamodel().findEntityDescriptor( resultJavaType );
|
||||
if ( entityDescriptor != null ) {
|
||||
uniqueRows = true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user