2 Stimmen

Ist JPA ein geeignetes ORM für dieses Szenario?

Wir haben eine zentrale Datenbank für Konten. Sie enthält Anmeldeinformationen und ein Feld namens Datenbankprofil. Das Datenbankprofil gibt an, welche Datenbankverbindung für das Konto verwendet werden soll. Zum Beispiel hätten wir Profil1, Profil2, Profil3... ProfilN

Wenn ein Benutzer mit Profil1 angegeben ist, würde er eine andere Datenbank verwenden als ein Benutzer, der mit Profil2 angegeben ist.

Mein Verständnis von JPA ist, dass man für jedes Profil (Persistenzeinheit) eine neue EntityManagerFactory benötigt, auch wenn die Datenbanken alle das gleiche Schema haben, nur unterschiedliche Verbindungsinformationen. Wenn wir also am Ende 100 Profile haben, würden wir 100 Entity Manager Factories haben, was nicht ideal erscheint.

Ich habe mir die EntityManagerFactory angesehen, und es scheint nicht zuzulassen, dass Sie die Datenbankverbindungsoptionen ändern.

Ist meine einzige Option, N EntityManagerFactory's zu haben, und wenn ja würde ihre alle wichtigen Konsequenzen zu diesem (wie schlechte Leistung) sein?

Danke für jeden Rat.

3voto

Affe Punkte 46224

Die Dinge, von denen Sie sprechen, fallen nicht mehr in den Anwendungsbereich der JPA-Abstraktion. Dinge wie die spezifische Verbindungsverwaltung sind im Allgemeinen eher anbieterspezifisch. Zum Beispiel können Sie mit Hibernate SessionFactory sicherlich neue Sitzungen aus einer fehlerhaften JDBC-Verbindung erstellen . Es gäbe Fallstricke zu berücksichtigen, wie ID-Generierung Schemata (Sie müssen wahrscheinlich Sequenzen in der DB generiert verwenden), und Sie sind im Grunde für L2-Caching hooped, aber mit sorgfältiger Programmierung könnte es gemacht werden, um zu arbeiten.

2voto

Tassos Bassoukos Punkte 15834

Verwenden Sie einfach javax.persistence.Persistence#createEntityMananagerFactory(String,Map) und geben Sie in der Map die Verbindungsparameter an. Zwischenspeichern Sie die EMF und verwenden Sie die Verbindungen mit Bedacht, mischen Sie keine Objekte aus verschiedenen EMF.

2voto

Aravind Yarram Punkte 76365

Wenn Sie Spring verwenden, dann weiß ich, dass es eine Möglichkeit gibt, die DataSource dynamisch zu wechseln. Mehr Informationen finden Sie unter aquí

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X