Skip to content

Commit dd29eb0

Browse files
committed
HHH-19559 test for schema-based multitenancy
1 parent e034920 commit dd29eb0

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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( "HELLO" );
32+
managerForTenantSchema.drop(true);
33+
managerForTenantSchema.create( true );
34+
scope.inTransaction( session -> {
35+
Person person = new Person();
36+
person.ssn = "123456789";
37+
person.tenantId = "hello";
38+
person.name = "Gavin";
39+
session.persist( person );
40+
} );
41+
}
42+
43+
@Entity(name = "PersonForTenant")
44+
static class Person {
45+
@Id
46+
String ssn;
47+
@TenantId
48+
String tenantId;
49+
private String name;
50+
}
51+
52+
public static class MyResolver implements CurrentTenantIdentifierResolver<String> {
53+
@Override
54+
public @NonNull String resolveCurrentTenantIdentifier() {
55+
return "hello";
56+
}
57+
58+
@Override
59+
public boolean validateExistingCurrentSessions() {
60+
return false;
61+
}
62+
}
63+
64+
public static class MyMapper implements TenantSchemaMapper<String> {
65+
@Override
66+
public @NonNull String schemaName(@NonNull String tenantIdentifier) {
67+
return tenantIdentifier;
68+
}
69+
}
70+
71+
}

0 commit comments

Comments
 (0)