MultiTenancy mit Hibernate 4.0 mit separatem Schema Ansatz

9

Ich verwende EJB 3.0 und Hibernate 4 mit PostgreSQL als Datenbankserver, um ein mandantenfähiges System zu erstellen, in dem jeder Mandanten ein separates, aber identisches Schema hat. Ich bin noch in der Testphase, wo ich 3 Schemata public , company1 , company2 habe, die alle eine einzige Tischperson haben. Nun möchte ich das Schema in Laufzeit ändern, so wie es der Benutzer tut, damit er nur die Daten seiner Firma sehen kann.

Hier ist mein Beispielcode: Entitätsobjekt:

%Vor%

Die Klasse MultiTenantConnectionProvider :

%Vor%

Die Klasse CurrentTenantIdentifierResolver :

%Vor%

Die Datei persistence.xml :

%Vor%

Und schließlich die Klasse DAO :

%Vor%

In diesem Beispiel habe ich das Schema als company1 fest programmiert, aber es bleibt bestehen oder ruft die Daten aus dem öffentlichen Schema ab. Also wo liege ich falsch in diesem Beispiel.

    
Manthan Shah 13.10.2013, 18:07
quelle

1 Antwort

1

Die Frage ist bereits 1 Jahr alt, aber ich denke, dass das Problem der Verwendung verschiedener Schemata in Abhängigkeit von einigen Laufzeitbedingungen üblich ist, also werde ich trotzdem antworten. Wenn ich Sie richtig verstehe und die Menge der Mandanten klein ist, dann denke ich, dass das, was Sie erreichen wollen, der einfachste Weg ist, eine separate Persistenz-Einheit für jeden Mandanten in Ihrer persistence.xml

zu definieren

%Vor%

Dann haben Sie für jeden einen separaten entityManager:

%Vor%

Jetzt können Sie zwischen Entity Managern wechseln, wenn Sie den aktuell autorisierten Benutzer verwenden.

Abhängig von Ihrer genauen Infrastruktur usw. können auch andere Ansätze existieren. Wenn sich beispielsweise alle Ihre Schemas auf demselben Server befinden, könnten Sie auch versuchen, die Schemanamen direkt an Ihre Abfragen zu übergeben.

Dies ist reine JPA und somit portabel und hängt nicht von einem Persistenzanbieter wie Hibernate oder Ihrem DBMS ab.

    
ferdystschenko 21.11.2014 09:45
quelle