HHH-16179 Session.find should not apply filters
This commit is contained in:
parent
2c9a508dd2
commit
0b5e27d133
|
@ -542,9 +542,9 @@ include::{extrasdir}/pc-filter-entity-query-example.sql[]
|
|||
|
||||
[IMPORTANT]
|
||||
====
|
||||
Filters apply to entity queries and to direct fetching.
|
||||
Filters apply to entity queries, but not to direct fetching.
|
||||
|
||||
Therefore, even in the following example, the filter is taken into consideration when fetching an entity from the Persistence Context.
|
||||
Therefore, in the following example, the filter is not taken into consideration when fetching an entity from the Persistence Context.
|
||||
|
||||
[[pc-filter-entity-example]]
|
||||
.Fetching entities mapped with `@Filter`
|
||||
|
|
|
@ -110,7 +110,7 @@ public class FilterTest extends BaseEntityManagerFunctionalTestCase {
|
|||
Account account2 = entityManager.find(Account.class, 2L);
|
||||
|
||||
assertNotNull(account1);
|
||||
assertNull(account2);
|
||||
assertNotNull(account2);
|
||||
});
|
||||
|
||||
doInJPA(this::entityManagerFactory, entityManager -> {
|
||||
|
@ -146,7 +146,7 @@ public class FilterTest extends BaseEntityManagerFunctionalTestCase {
|
|||
|
||||
Account account = entityManager.find(Account.class, 2L);
|
||||
|
||||
assertNull(account);
|
||||
assertFalse( account.isActive() );
|
||||
//end::pc-filter-entity-example[]
|
||||
});
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
package org.hibernate.loader.ast.internal;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
@ -625,7 +626,8 @@ public class LoaderSelectBuilder {
|
|||
querySpec::applyPredicate,
|
||||
tableGroup,
|
||||
true,
|
||||
loadQueryInfluencers.getEnabledFilters(),
|
||||
// HHH-16179 Session.find should not apply filters
|
||||
Collections.emptyMap(),//loadQueryInfluencers.getEnabledFilters(),
|
||||
null,
|
||||
astCreationState
|
||||
);
|
||||
|
|
|
@ -67,7 +67,9 @@ public class FilterParameterTests {
|
|||
scope.inTransaction( (session) -> {
|
||||
session.enableFilter( "filterYesNoConverter" ).setParameter( "yesNo", Boolean.FALSE );
|
||||
|
||||
final EntityOne loaded = session.byId( EntityOne.class ).load( 1 );
|
||||
final EntityOne loaded = session.createQuery( "from EntityOne e where e.id = :id", EntityOne.class )
|
||||
.setParameter( "id", 1 )
|
||||
.getSingleResultOrNull();
|
||||
assertThat( loaded ).isNull();
|
||||
} );
|
||||
}
|
||||
|
@ -95,7 +97,9 @@ public class FilterParameterTests {
|
|||
session.enableFilter( "filterYesNoBoolean" ).setParameter( "yesNo", Boolean.FALSE );
|
||||
|
||||
try {
|
||||
session.byId( EntityOne.class ).load( 1 );
|
||||
session.createQuery( "from EntityOne e where e.id = :id", EntityOne.class )
|
||||
.setParameter( "id", 1 )
|
||||
.getSingleResultOrNull();
|
||||
fail( "Expecting an exception" );
|
||||
}
|
||||
catch (Exception expected) {
|
||||
|
@ -114,7 +118,9 @@ public class FilterParameterTests {
|
|||
scope.inTransaction( (session) -> {
|
||||
session.enableFilter( "filterNumberConverter" ).setParameter( "zeroOne", Boolean.FALSE );
|
||||
|
||||
final EntityTwo loaded = session.byId( EntityTwo.class ).load( 1 );
|
||||
final EntityTwo loaded = session.createQuery( "from EntityTwo e where e.id = :id", EntityTwo.class )
|
||||
.setParameter( "id", 1 )
|
||||
.getSingleResultOrNull();
|
||||
assertThat( loaded ).isNull();
|
||||
} );
|
||||
}
|
||||
|
@ -142,7 +148,9 @@ public class FilterParameterTests {
|
|||
session.enableFilter( "filterNumberBoolean" ).setParameter( "zeroOne", Boolean.FALSE );
|
||||
|
||||
try {
|
||||
session.byId( EntityTwo.class ).load( 1 );
|
||||
session.createQuery( "from EntityTwo e where e.id = :id", EntityTwo.class )
|
||||
.setParameter( "id", 1 )
|
||||
.getSingleResultOrNull();
|
||||
fail( "Expecting an exception" );
|
||||
}
|
||||
catch (Exception expected) {
|
||||
|
@ -166,7 +174,9 @@ public class FilterParameterTests {
|
|||
session.enableFilter( "filterMismatchConverter" ).setParameter( "mismatch", Boolean.FALSE );
|
||||
|
||||
try {
|
||||
session.byId( EntityThree.class ).load( 1 );
|
||||
session.createQuery( "from EntityThree e where e.id = :id", EntityThree.class )
|
||||
.setParameter( "id", 1 )
|
||||
.getSingleResultOrNull();
|
||||
fail( "Expecting an exception" );
|
||||
}
|
||||
catch (Exception expected) {
|
||||
|
|
|
@ -81,7 +81,7 @@ public class TenantIdTest implements SessionFactoryProducer {
|
|||
|
||||
currentTenant = "yours";
|
||||
scope.inTransaction( session -> {
|
||||
assertNull( session.find(Account.class, acc.id) );
|
||||
assertNotNull( session.find(Account.class, acc.id) );
|
||||
assertEquals( 0, session.createQuery("from Account").getResultList().size() );
|
||||
session.disableFilter(TenantIdBinder.FILTER_NAME);
|
||||
assertNotNull( session.find(Account.class, acc.id) );
|
||||
|
|
|
@ -79,7 +79,7 @@ public class TenantLongIdTest implements SessionFactoryProducer {
|
|||
|
||||
currentTenant = yours;
|
||||
scope.inTransaction( session -> {
|
||||
assertNull( session.find(Account.class, acc.id) );
|
||||
assertNotNull( session.find(Account.class, acc.id) );
|
||||
assertEquals( 0, session.createQuery("from Account").getResultList().size() );
|
||||
session.disableFilter(TenantIdBinder.FILTER_NAME);
|
||||
assertNotNull( session.find(Account.class, acc.id) );
|
||||
|
|
|
@ -81,7 +81,7 @@ public class TenantUuidTest implements SessionFactoryProducer {
|
|||
|
||||
currentTenant = yours;
|
||||
scope.inTransaction( session -> {
|
||||
assertNull( session.find(Account.class, acc.id) );
|
||||
assertNotNull( session.find(Account.class, acc.id) );
|
||||
assertEquals( 0, session.createQuery("from Account").getResultList().size() );
|
||||
session.disableFilter(TenantIdBinder.FILTER_NAME);
|
||||
assertNotNull( session.find(Account.class, acc.id) );
|
||||
|
|
Loading…
Reference in New Issue