Skip to content

Commit 4f0c552

Browse files
committed
HHH-19559 test for schema-based multitenancy
1 parent 12cac98 commit 4f0c552

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.multitenancy;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.Id;
9+
import org.checkerframework.checker.nullness.qual.NonNull;
10+
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
11+
import org.hibernate.context.spi.TenantSchemaMapper;
12+
import org.hibernate.relational.SchemaManager;
13+
import org.hibernate.annotations.TenantId;
14+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
15+
import org.hibernate.testing.orm.junit.Jpa;
16+
import org.hibernate.testing.orm.junit.Setting;
17+
import org.junit.jupiter.api.Test;
18+
19+
import static org.hibernate.cfg.MultiTenancySettings.MULTI_TENANT_IDENTIFIER_RESOLVER;
20+
import static org.hibernate.cfg.MultiTenancySettings.MULTI_TENANT_SCHEMA_MAPPER;
21+
22+
@Jpa(annotatedClasses = {SchemaBasedMultitenancyTest.Person.class},
23+
integrationSettings =
24+
{@Setting(name = MULTI_TENANT_SCHEMA_MAPPER,
25+
value = "org.hibernate.orm.test.multitenancy.SchemaBasedMultitenancyTest$MyMapper"),
26+
@Setting(name = MULTI_TENANT_IDENTIFIER_RESOLVER,
27+
value = "org.hibernate.orm.test.multitenancy.SchemaBasedMultitenancyTest$MyResolver")})
28+
public class SchemaBasedMultitenancyTest {
29+
@Test void test(EntityManagerFactoryScope scope) {
30+
var schemaManager = (SchemaManager) scope.getEntityManagerFactory().getSchemaManager();
31+
SchemaManager managerForTenantSchema = schemaManager.forSchema( "gavin" );
32+
managerForTenantSchema.drop(true);
33+
managerForTenantSchema.create( true );
34+
scope.inTransaction( session -> {
35+
Person person = new Person();
36+
person.ssn = "123456789";
37+
person.tenantId = "gavin";
38+
person.name = "Gavin";
39+
session.persist( person );
40+
} );
41+
}
42+
43+
@Entity static class Person {
44+
@Id
45+
String ssn;
46+
@TenantId
47+
String tenantId;
48+
private String name;
49+
}
50+
51+
public static class MyResolver implements CurrentTenantIdentifierResolver<String> {
52+
@Override
53+
public @NonNull String resolveCurrentTenantIdentifier() {
54+
return "gavin";
55+
}
56+
57+
@Override
58+
public boolean validateExistingCurrentSessions() {
59+
return false;
60+
}
61+
}
62+
63+
public static class MyMapper implements TenantSchemaMapper<String> {
64+
@Override
65+
public @NonNull String schemaName(@NonNull String tenantIdentifier) {
66+
return tenantIdentifier.toUpperCase();
67+
}
68+
}
69+
70+
}

0 commit comments

Comments
 (0)