HHH-16023 Check fetchable declaring type when not found in persister
This commit is contained in:
parent
64b3855c73
commit
7cd6d0422f
|
@ -1828,7 +1828,7 @@ public abstract class AbstractEntityPersister
|
||||||
return fetches.build();
|
return fetches.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isSelectable(FetchParent fetchParent, Fetchable fetchable) {
|
protected boolean isSelectable(FetchParent fetchParent, Fetchable fetchable) {
|
||||||
if ( fetchParent instanceof EmbeddableResultGraphNode ) {
|
if ( fetchParent instanceof EmbeddableResultGraphNode ) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1836,9 +1836,24 @@ public abstract class AbstractEntityPersister
|
||||||
final AttributeMapping attributeMapping = fetchable.asAttributeMapping();
|
final AttributeMapping attributeMapping = fetchable.asAttributeMapping();
|
||||||
if ( attributeMapping != null ) {
|
if ( attributeMapping != null ) {
|
||||||
final int propertyNumber = attributeMapping.getStateArrayPosition();
|
final int propertyNumber = attributeMapping.getStateArrayPosition();
|
||||||
// final int tableNumber = getSubclassPropertyTableNumber( propertyNumber );
|
if ( propertyNumber < propertySelectable.length ) {
|
||||||
// return !isSubclassTableSequentialSelect( tableNumber ) && propertySelectable[propertyNumber];
|
return propertySelectable[propertyNumber];
|
||||||
return propertySelectable[propertyNumber];
|
}
|
||||||
|
else {
|
||||||
|
final ManagedMappingType declaringType = attributeMapping.getDeclaringType();
|
||||||
|
// try to check select-ability from the declaring type
|
||||||
|
if ( declaringType != this ) {
|
||||||
|
assert declaringType instanceof AbstractEntityPersister;
|
||||||
|
final AbstractEntityPersister subPersister = (AbstractEntityPersister) declaringType;
|
||||||
|
return subPersister.propertySelectable[propertyNumber];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"Unrecognized fetchable [" + fetchable.getFetchableName() + "] at index "
|
||||||
|
+ propertyNumber + " for entity [" + getEntityName() + "]"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -8,8 +8,11 @@ package org.hibernate.orm.test.jpa.ql;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hibernate.dialect.H2Dialect;
|
||||||
|
|
||||||
import org.hibernate.testing.orm.junit.DomainModel;
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
import org.hibernate.testing.orm.junit.JiraKey;
|
import org.hibernate.testing.orm.junit.JiraKey;
|
||||||
|
import org.hibernate.testing.orm.junit.RequiresDialect;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
@ -38,6 +41,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
})
|
})
|
||||||
@SessionFactory
|
@SessionFactory
|
||||||
@JiraKey("HHH-16023")
|
@JiraKey("HHH-16023")
|
||||||
|
@RequiresDialect(H2Dialect.class)
|
||||||
public class NamedNativeQueryWithGenericsTest {
|
public class NamedNativeQueryWithGenericsTest {
|
||||||
@Test
|
@Test
|
||||||
public void testNamedNativeQuery(SessionFactoryScope scope) {
|
public void testNamedNativeQuery(SessionFactoryScope scope) {
|
||||||
|
|
Loading…
Reference in New Issue