99import org .checkerframework .checker .nullness .qual .NonNull ;
1010import org .hibernate .context .spi .CurrentTenantIdentifierResolver ;
1111import org .hibernate .context .spi .TenantSchemaMapper ;
12+ import org .hibernate .dialect .SybaseASEDialect ;
1213import org .hibernate .relational .SchemaManager ;
1314import org .hibernate .annotations .TenantId ;
15+ import org .hibernate .testing .orm .junit .DialectFeatureChecks ;
1416import org .hibernate .testing .orm .junit .EntityManagerFactoryScope ;
17+ import org .hibernate .testing .orm .junit .JiraKey ;
1518import org .hibernate .testing .orm .junit .Jpa ;
19+ import org .hibernate .testing .orm .junit .RequiresDialectFeature ;
1620import org .hibernate .testing .orm .junit .Setting ;
21+ import org .hibernate .testing .orm .junit .SkipForDialect ;
1722import org .junit .jupiter .api .Test ;
1823
1924import static org .hibernate .cfg .MultiTenancySettings .MULTI_TENANT_IDENTIFIER_RESOLVER ;
2025import static org .hibernate .cfg .MultiTenancySettings .MULTI_TENANT_SCHEMA_MAPPER ;
26+ import static org .junit .jupiter .api .AssertionsKt .assertNotNull ;
27+ import static org .junit .jupiter .api .AssertionsKt .assertNull ;
2128
2229@ Jpa (annotatedClasses = {SchemaBasedMultitenancyTest .Person .class },
2330 integrationSettings =
2431 {@ Setting (name = MULTI_TENANT_SCHEMA_MAPPER ,
2532 value = "org.hibernate.orm.test.multitenancy.SchemaBasedMultitenancyTest$MyMapper" ),
2633 @ Setting (name = MULTI_TENANT_IDENTIFIER_RESOLVER ,
2734 value = "org.hibernate.orm.test.multitenancy.SchemaBasedMultitenancyTest$MyResolver" )})
35+ @ RequiresDialectFeature (feature = DialectFeatureChecks .SupportSchemaCreation .class )
36+ @ SkipForDialect (dialectClass = SybaseASEDialect .class , reason = "getSchema() method not implemented by jTDS" )
37+ @ JiraKey ("HHH-19559" )
2838public class SchemaBasedMultitenancyTest {
39+ private static String currentTenantIdentifier ;
40+
2941 @ Test void test (EntityManagerFactoryScope scope ) {
3042 var schemaManager = (SchemaManager ) scope .getEntityManagerFactory ().getSchemaManager ();
31- SchemaManager managerForTenantSchema = schemaManager . forSchema ( "HELLO" );
32- managerForTenantSchema . drop ( true );
33- managerForTenantSchema . create ( true ) ;
43+ createSchema ( schemaManager , "HELLO" );
44+ createSchema ( schemaManager , "GOODBYE" );
45+ currentTenantIdentifier = "hello" ;
3446 scope .inTransaction ( session -> {
3547 Person person = new Person ();
3648 person .ssn = "123456789" ;
3749 person .tenantId = "hello" ;
3850 person .name = "Gavin" ;
3951 session .persist ( person );
4052 } );
53+ scope .inTransaction ( session -> {
54+ assertNotNull ( session .find ( Person .class , "123456789" ) );
55+ } );
56+ currentTenantIdentifier = "goodbye" ;
57+ scope .inTransaction ( session -> {
58+ assertNull ( session .find ( Person .class , "123456789" ) );
59+ } );
60+ }
61+
62+ private static void createSchema (SchemaManager schemaManager , String schemaName ) {
63+ SchemaManager managerForTenantSchema = schemaManager .forSchema ( schemaName );
64+ managerForTenantSchema .drop (true );
65+ managerForTenantSchema .create ( true );
4166 }
4267
4368 @ Entity (name = "PersonForTenant" )
@@ -52,7 +77,7 @@ static class Person {
5277 public static class MyResolver implements CurrentTenantIdentifierResolver <String > {
5378 @ Override
5479 public @ NonNull String resolveCurrentTenantIdentifier () {
55- return "hello" ;
80+ return currentTenantIdentifier ;
5681 }
5782
5883 @ Override
0 commit comments