Skip to content

proposed fixes to Query API #4516

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Dec 27, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ public interface SynchronizeableQuery<T> {
*/
default SynchronizeableQuery<T> addSynchronizedQuerySpace(String... querySpaces) {
if ( querySpaces != null ) {
for ( int i = 0; i < querySpaces.length; i++ ) {
addSynchronizedQuerySpace( querySpaces[i] );
for (String querySpace : querySpaces) {
addSynchronizedQuerySpace(querySpace);
}
}
return this;
Expand Down Expand Up @@ -84,8 +84,8 @@ default SynchronizeableQuery<T> addSynchronizedTable(String... tableExpressions)
*/
default SynchronizeableQuery<T> addSynchronizedEntityName(String... entityNames) throws MappingException {
if ( entityNames != null ) {
for ( int i = 0; i < entityNames.length; i++ ) {
addSynchronizedEntityName( entityNames[i] );
for (String entityName : entityNames) {
addSynchronizedEntityName(entityName);
}
}
return this;
Expand All @@ -101,16 +101,15 @@ default SynchronizeableQuery<T> addSynchronizedEntityName(String... entityNames)
*
* @throws MappingException Indicates the given class could not be resolved as an entity
*/
@SuppressWarnings( "rawtypes" )
SynchronizeableQuery<T> addSynchronizedEntityClass(Class entityClass) throws MappingException;
SynchronizeableQuery<T> addSynchronizedEntityClass(@SuppressWarnings("rawtypes") Class entityClass) throws MappingException;

/**
* Adds one-or-more entities (by class) whose tables should be added as synchronized spaces
*/
default SynchronizeableQuery<T> addSynchronizedEntityClass(Class<?>... entityClasses) throws MappingException {
if ( entityClasses != null ) {
for ( int i = 0; i < entityClasses.length; i++ ) {
addSynchronizedEntityClass( entityClasses[i] );
for (Class<?> entityClass : entityClasses) {
addSynchronizedEntityClass(entityClass);
}
}
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -456,13 +456,13 @@ public <T> QueryImplementor<T> createQuery(CriteriaQuery<T> criteriaQuery) {
return queryDelegate().createQuery( criteriaQuery );
}

@Override @SuppressWarnings("rawtypes")
public QueryImplementor createQuery(CriteriaUpdate updateQuery) {
@Override
public QueryImplementor<Void> createQuery(CriteriaUpdate updateQuery) {
return queryDelegate().createQuery( updateQuery );
}

@Override @SuppressWarnings("rawtypes")
public QueryImplementor createQuery(CriteriaDelete deleteQuery) {
@Override
public QueryImplementor<Void> createQuery(CriteriaDelete deleteQuery) {
return queryDelegate().createQuery( deleteQuery );
}

Expand Down Expand Up @@ -511,11 +511,21 @@ public NativeQueryImplementor createNativeQuery(String sqlString, Class resultCl
return queryDelegate().createNativeQuery( sqlString, resultClass );
}

@Override @SuppressWarnings({"rawtypes", "unchecked"})
public NativeQueryImplementor createNativeQuery(String sqlString, Class resultClass, String tableAlias) {
return queryDelegate().createNativeQuery( sqlString, resultClass, tableAlias );
}

@Override @SuppressWarnings("rawtypes")
public NativeQueryImplementor createNativeQuery(String sqlString, String resultSetMappingName) {
return queryDelegate().createNativeQuery( sqlString, resultSetMappingName );
}

@Override @SuppressWarnings({"rawtypes", "unchecked"})
public NativeQueryImplementor createNativeQuery(String sqlString, String resultSetMappingName, Class resultClass) {
return queryDelegate().createNativeQuery( sqlString, resultSetMappingName, resultClass );
}

@Override
public ProcedureCall createNamedStoredProcedureQuery(String name) {
return delegate.createNamedStoredProcedureQuery( name );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.hibernate.SessionEventListener;
import org.hibernate.SessionException;
import org.hibernate.Transaction;
import org.hibernate.UnknownEntityTypeException;
import org.hibernate.cache.spi.CacheTransactionSynchronization;
import org.hibernate.engine.internal.SessionEventListenerManagerImpl;
import org.hibernate.engine.jdbc.LobCreator;
Expand Down Expand Up @@ -692,59 +693,69 @@ public NativeQueryImplementor createNativeQuery(String sqlString) {
}
}

@Override @SuppressWarnings({"rawtypes", "unchecked"})
//note: we're doing something a bit funny here to work around
// the classing signatures declared by the supertypes
public NativeQueryImplementor createNativeQuery(String sqlString, Class resultClass) {
checkOpen();
pulseTransactionCoordinator();
delayedAfterCompletion();

try {
NativeQueryImplementor query = createNativeQuery( sqlString );
if ( Tuple.class.equals( resultClass ) ) {
query.setTupleTransformer( new NativeQueryTupleTransformer() );
}
else {
query.addEntity( "alias1", resultClass.getName(), LockMode.READ );
}
return query;
}
catch (RuntimeException he) {
throw getExceptionConverter().convert( he );
}
}

@Override @SuppressWarnings("rawtypes")
public NativeQueryImplementor createNativeQuery(String sqlString, String resultSetMappingName) {
checkOpen();
pulseTransactionCoordinator();
delayedAfterCompletion();

final NativeQueryImplementor<Object> query;
try {
if ( StringHelper.isNotEmpty( resultSetMappingName ) ) {
if ( StringHelper.isNotEmpty(resultSetMappingName) ) {
final NamedResultSetMappingMemento resultSetMappingMemento = getFactory().getQueryEngine()
.getNamedObjectRepository()
.getResultSetMappingMemento( resultSetMappingName );
.getResultSetMappingMemento(resultSetMappingName);

if ( resultSetMappingMemento == null ) {
throw new HibernateException( "Could not resolve specified result-set mapping name : " + resultSetMappingName );
throw new HibernateException( "Could not resolve specified result-set mapping name : "
+ resultSetMappingName);
}

query = new NativeQueryImpl<>( sqlString, resultSetMappingMemento, this );
return new NativeQueryImpl<>(sqlString, resultSetMappingMemento, this);
}
else {
query = new NativeQueryImpl<>( sqlString, this );
return new NativeQueryImpl<>(sqlString, this);
}
//TODO: why no applyQuerySettingsAndHints( query ); ???
}
catch (RuntimeException he) {
throw getExceptionConverter().convert( he );
}
}

@Override @SuppressWarnings({"rawtypes", "unchecked"})
//note: we're doing something a bit funny here to work around
// the clashing signatures declared by the supertypes
public NativeQueryImplementor createNativeQuery(String sqlString, Class resultClass) {
NativeQueryImplementor query = createNativeQuery( sqlString );
if ( Tuple.class.equals(resultClass) ) {
query.setTupleTransformer( new NativeQueryTupleTransformer() );
}
else if ( getFactory().getMetamodel().isEntityClass(resultClass) ) {
query.addEntity( "alias1", resultClass.getName(), LockMode.READ );
}
return query;
}

@Override @SuppressWarnings({"rawtypes", "unchecked"})
public NativeQueryImplementor createNativeQuery(String sqlString, Class resultClass, String tableAlias) {
NativeQueryImplementor query = createNativeQuery( sqlString );
if ( getFactory().getMetamodel().isEntityClass(resultClass) ) {
query.addEntity( tableAlias, resultClass.getName(), LockMode.READ );
}
else {
throw new UnknownEntityTypeException( "unable to locate persister: " + resultClass.getName() );
}
return query;
}

@Override @SuppressWarnings({"rawtypes", "unchecked"})
public NativeQueryImplementor createNativeQuery(String sqlString, String resultSetMappingName, Class resultClass) {
final NativeQueryImplementor query = createNativeQuery( sqlString, resultSetMappingName );
if ( Tuple.class.equals( resultClass ) ) {
query.setTupleTransformer( new NativeQueryTupleTransformer() );
}
return query;
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// named query handling
Expand Down Expand Up @@ -996,12 +1007,12 @@ public <T> QueryImplementor<T> createQuery(CriteriaQuery<T> criteriaQuery) {
}
}

@Override @SuppressWarnings("rawtypes")
public QueryImplementor createQuery(CriteriaUpdate criteriaUpdate) {
@Override @SuppressWarnings("unchecked")
public QueryImplementor<Void> createQuery(@SuppressWarnings("rawtypes") CriteriaUpdate criteriaUpdate) {
checkOpen();
try {
return new QuerySqmImpl<>(
(SqmUpdateStatement<?>) criteriaUpdate,
(SqmUpdateStatement<Void>) criteriaUpdate,
null,
this
);
Expand All @@ -1011,12 +1022,12 @@ public QueryImplementor createQuery(CriteriaUpdate criteriaUpdate) {
}
}

@Override @SuppressWarnings("rawtypes")
public QueryImplementor createQuery(CriteriaDelete criteriaDelete) {
@Override @SuppressWarnings("unchecked")
public QueryImplementor<Void> createQuery(@SuppressWarnings("rawtypes") CriteriaDelete criteriaDelete) {
checkOpen();
try {
return new QuerySqmImpl<>(
(SqmDeleteStatement<?>) criteriaDelete,
(SqmDeleteStatement<Void>) criteriaDelete,
null,
this
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.query.NavigablePath;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.sql.ast.spi.SqlAstCreationState;
import org.hibernate.sql.ast.tree.from.TableGroup;
import org.hibernate.type.spi.TypeConfiguration;

Expand Down Expand Up @@ -90,7 +89,7 @@ public interface MappingMetamodel {
*
* @see #findEntityDescriptor
*/
EntityPersister getEntityDescriptor(Class entityJavaType);
EntityPersister getEntityDescriptor(Class<?> entityJavaType);

/**
* Find an entity mapping descriptor based on its Hibernate entity-name.
Expand All @@ -104,7 +103,9 @@ public interface MappingMetamodel {
*
* @apiNote Returns {@code null} rather than throwing exception
*/
EntityPersister findEntityDescriptor(Class entityJavaType);
EntityPersister findEntityDescriptor(Class<?> entityJavaType);

boolean isEntityClass(Class<?> entityJavaType);

/**
* Locate an entity mapping descriptor by Class. The passed Class might
Expand All @@ -114,15 +115,15 @@ public interface MappingMetamodel {
*
* @throws org.hibernate.UnknownEntityTypeException If a matching EntityPersister cannot be located
*/
EntityPersister locateEntityDescriptor(Class byClass);
EntityPersister locateEntityDescriptor(Class<?> byClass);

/**
* @see #locateEntityDescriptor
*
* @deprecated (since 6.0) use {@link #locateEntityDescriptor(Class)} instead
*/
@Deprecated
default EntityPersister locateEntityPersister(Class byClass) {
default EntityPersister locateEntityPersister(Class<?> byClass) {
return locateEntityDescriptor( byClass );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -401,17 +401,22 @@ public EntityPersister findEntityDescriptor(String entityName) {
}

@Override
public EntityPersister findEntityDescriptor(Class entityJavaType) {
public EntityPersister findEntityDescriptor(Class<?> entityJavaType) {
return findEntityDescriptor( entityJavaType.getName() );
}

@Override
public boolean isEntityClass(Class<?> entityJavaType) {
return entityPersisterMap.containsKey( entityJavaType.getName() );
}

@Override
public SessionFactoryImplementor getSessionFactory() {
return sessionFactory;
}

@Override
public EntityPersister getEntityDescriptor(Class entityJavaType) {
public EntityPersister getEntityDescriptor(Class<?> entityJavaType) {
EntityPersister entityPersister = entityPersisterMap.get( entityJavaType.getName() );
if ( entityPersister == null ) {
String mappedEntityName = entityProxyInterfaceMap.get( entityJavaType );
Expand All @@ -428,7 +433,7 @@ public EntityPersister getEntityDescriptor(Class entityJavaType) {
}

@Override
public EntityPersister locateEntityDescriptor(Class byClass) {
public EntityPersister locateEntityDescriptor(Class<?> byClass) {
EntityPersister entityPersister = entityPersisterMap.get( byClass.getName() );
if ( entityPersister == null ) {
String mappedEntityName = entityProxyInterfaceMap.get( byClass );
Expand Down Expand Up @@ -562,7 +567,7 @@ public Map<String, CollectionPersister> collectionPersisters() {
}

@Override
public EntityPersister entityPersister(Class entityClass) {
public EntityPersister entityPersister(Class<?> entityClass) {
return entityPersister( entityClass.getName() );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public interface MetamodelImplementor extends MappingMetamodel, Metamodel {
*
* @throws MappingException Indicates persister for that class could not be found.
*/
EntityPersister entityPersister(Class entityClass);
EntityPersister entityPersister(Class<?> entityClass);

/**
* Locate the persister for an entity by the entity-name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ default void close() {
@Override
ProcedureCall addSynchronizedEntityName(String entityName) throws MappingException;

@Override
@Override @SuppressWarnings("rawtypes")
ProcedureCall addSynchronizedEntityClass(Class entityClass) throws MappingException;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -744,7 +744,7 @@ protected void addSynchronizedQuerySpaces(EntityPersister persister) {
}

@Override
public ProcedureCallImplementor<R> addSynchronizedEntityClass(Class entityClass) {
public ProcedureCallImplementor<R> addSynchronizedEntityClass(@SuppressWarnings("rawtypes") Class entityClass) {
addSynchronizedQuerySpaces( getSession().getFactory().getMetamodel().entityPersister( entityClass.getName() ) );
return this;
}
Expand Down Expand Up @@ -801,12 +801,12 @@ private static List<NamedCallableQueryMemento.ParameterMemento> toParameterMemen
}

@Override
protected void applyEntityGraphQueryHint(String hintName, RootGraphImplementor entityGraph) {
protected void applyEntityGraphQueryHint(String hintName, @SuppressWarnings("rawtypes") RootGraphImplementor entityGraph) {
throw new IllegalStateException( "EntityGraph hints are not supported for ProcedureCall/StoredProcedureQuery" );
}

@Override
public Query<R> applyGraph(RootGraph<?> graph, GraphSemantic semantic) {
public Query<R> applyGraph(@SuppressWarnings("rawtypes") RootGraph graph, GraphSemantic semantic) {
throw new IllegalStateException( "EntityGraph hints are not supported for ProcedureCall/StoredProcedureQuery" );
}

Expand All @@ -819,8 +819,7 @@ public Query<R> applyGraph(RootGraph<?> graph, GraphSemantic semantic) {
@Override
public boolean execute() {
try {
final Output rtn = outputs().getCurrent();
return ResultSetOutput.class.isInstance( rtn );
return outputs().getCurrent() instanceof ResultSetOutput;
}
catch (NoMoreOutputsException e) {
return false;
Expand Down Expand Up @@ -887,7 +886,7 @@ public Object getOutputParameterValue(String parameterName) {

@Override
public boolean hasMoreResults() {
return outputs().goToNext() && ResultSetOutput.class.isInstance( outputs().getCurrent() );
return outputs().goToNext() && outputs().getCurrent() instanceof ResultSetOutput;
}

@Override
Expand All @@ -897,7 +896,7 @@ public int getUpdateCount() {
if ( rtn == null ) {
return -1;
}
else if ( UpdateCountOutput.class.isInstance( rtn ) ) {
else if ( rtn instanceof UpdateCountOutput ) {
return ( (UpdateCountOutput) rtn ).getUpdateCount();
}
else {
Expand All @@ -923,7 +922,7 @@ protected List<R> doList() {
}
try {
final Output rtn = outputs().getCurrent();
if ( !ResultSetOutput.class.isInstance( rtn ) ) {
if ( !(rtn instanceof ResultSetOutput) ) {
throw new IllegalStateException( "Current CallableStatement ou was not a ResultSet, but getResultList was called" );
}

Expand Down
Loading