[JIRA] (HHH-16661) Filters causes NPE when default schema is set
by Jones (JIRA)
Jones ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%... ) *updated* an issue
Hibernate ORM ( https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiNTdkOTM3MTUx... ) / Bug ( https://hibernate.atlassian.net/browse/HHH-16661?atlOrigin=eyJpIjoiNTdkOT... ) HHH-16661 ( https://hibernate.atlassian.net/browse/HHH-16661?atlOrigin=eyJpIjoiNTdkOT... ) Filters causes NPE when default schema is set ( https://hibernate.atlassian.net/browse/HHH-16661?atlOrigin=eyJpIjoiNTdkOT... )
Change By: Jones ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%... )
I am just reusing the same test case for [https://hibernate.atlassian.net/browse/HHH-16435|https://hibernate.atlass...]
If I add {{configuration.setProperty(AvailableSettings.DEFAULT_SCHEMA, "PUBLIC"); }}we always get a NPE
{noformat}@Entity
@Table(name = "ENTITY_A")
@DiscriminatorColumn(name = "DISC_COL", discriminatorType = DiscriminatorType.INTEGER)
@FilterDef(name = "DUMMY_FILTER", defaultCondition = "(ID IS NOT NULL)")
@Filter(name = "DUMMY_FILTER")
public abstract class AbstractEntityA {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
Integer id;
}{noformat}
{noformat}@Entity
@DiscriminatorValue("1")
public class EntityAChildOne extends AbstractEntityA {}{noformat}
{noformat}@Entity
@DiscriminatorValue("2")
public class EntityAChildTwo extends AbstractEntityA {}{noformat}
{noformat} @Override
protected void configure(Configuration configuration) {
super.configure(configuration);
configuration.setProperty(AvailableSettings.SHOW_SQL, Boolean.TRUE.toString());
configuration.setProperty(AvailableSettings.FORMAT_SQL, Boolean.TRUE.toString());
configuration.setProperty(AvailableSettings.DEFAULT_SCHEMA, "PUBLIC");
}
@Test
public void hhhXXXXTest() throws Exception {
try (Session s = openSession()) {
Transaction tx = s.beginTransaction();
EntityAChildOne entityAChildOne = new EntityAChildOne();
EntityAChildTwo entityAChildTwo = new EntityAChildTwo();
s.persist(entityAChildOne);
s.persist(entityAChildTwo);
tx.commit();
}
try (Session s = openSession()) {
Transaction tx = s.beginTransaction();
s.enableFilter("DUMMY_FILTER");
MutationQuery deleteQuery = s.createMutationQuery("delete from org.hibernate.bugs.EntityAChildTwo");
int actual = deleteQuery.executeUpdate();
assertThat(actual).isEqualTo(1);
tx.commit();
Query<AbstractEntityA> query = s.createQuery("select c from org.hibernate.bugs.AbstractEntityA c",
AbstractEntityA.class);
List<AbstractEntityA> actualList = query.list();
assertThat(actualList).hasSize(1);
}
}{noformat}
{noformat}Hibernate:
delete
from
PUBLIC.ENTITY_A
where
DISC_COL=2
and (
ID IS NOT NULL
){noformat}
{noformat}java.lang.NullPointerException: Cannot invoke "Object.hashCode()" because "key" is null
at java.base/java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.findEntityDescriptor(MappingMetamodelImpl.java:411)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.registerEntityNameUsage(BaseSqmToSqlAstConverter.java:2973)
at org.hibernate.internal.FilterHelper.render(FilterHelper.java:232)
at org.hibernate.internal.FilterHelper.generateFilterPredicate(FilterHelper.java:180)
at org.hibernate.internal.FilterHelper.applyEnabledFilters(FilterHelper.java:158)
at org.hibernate.persister.entity.AbstractEntityPersister.applyFilterRestrictions(AbstractEntityPersister.java:3042)
at org.hibernate.persister.entity.AbstractEntityPersister.applyBaseRestrictions(AbstractEntityPersister.java:3059)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeFromClauseRoot(BaseSqmToSqlAstConverter.java:2776)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.hibernate.query.sqm.tree.from.SqmFromClause.visitRoots(SqmFromClause.java:80)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitFromClause(BaseSqmToSqlAstConverter.java:2542)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQuerySpec(BaseSqmToSqlAstConverter.java:2028)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQuerySpec(BaseSqmToSqlAstConverter.java:433)
at org.hibernate.query.sqm.tree.select.SqmQuerySpec.accept(SqmQuerySpec.java:122)
at org.hibernate.query.sqm.spi.BaseSemanticQueryWalker.visitQueryPart(BaseSemanticQueryWalker.java:221)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQueryPart(BaseSqmToSqlAstConverter.java:1890)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitSelectStatement(BaseSqmToSqlAstConverter.java:1575)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitSelectStatement(BaseSqmToSqlAstConverter.java:433)
at org.hibernate.query.sqm.tree.select.SqmSelectStatement.accept(SqmSelectStatement.java:222)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.translate(BaseSqmToSqlAstConverter.java:768)
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.buildCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:344)
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:267)
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:243)
at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:518)
at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:367)
at org.hibernate.bugs.ORMUnitTestCase.hhh16435Test(ORMUnitTestCase.java:85)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.hibernate.testing.junit4.ExtendedFrameworkMethod.invokeExplosively(ExtendedFrameworkMethod.java:45)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:299)
at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:293)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.lang.Thread.run(Thread.java:833)
{noformat}
If I need to use Filters and a default schema, I see not no workaround for this issue.
please find the test case attached and also available at [https://github.com/ratoaq2/HHH-16661|https://github.com/ratoaq2/HHH-16661...]
( https://hibernate.atlassian.net/browse/HHH-16661#add-comment?atlOrigin=ey... ) Add Comment ( https://hibernate.atlassian.net/browse/HHH-16661#add-comment?atlOrigin=ey... )
Get Jira notifications on your phone! Download the Jira Cloud app for Android ( https://play.google.com/store/apps/details?id=com.atlassian.android.jira.... ) or iOS ( https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=EmailN... ) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100225- sha1:bbd69a1 )
2 years, 11 months