Puoi interrogare diversi database sullo stesso server utilizzando 1 sessione di Hibernate?

StackOverflow https://stackoverflow.com/questions/56589

  •  09-06-2019
  •  | 
  •  

Domanda

Fa un nuovo SessionFactory e Session l'oggetto deve essere creato per ogni database?Dispongo di un archivio dati per i dati della mia applicazione e di un archivio dati separato per la sicurezza dei miei dipendenti, utilizzato per convalidare gli utenti.Devo creare un nuovo oggetto SessionFactory e Session per le chiamate ai 2 diversi database?

È stato utile?

Soluzione

ok, quindi questo non risponde direttamente alla tua domanda, ma potrebbe offrire un'idea del motivo per cui dovresti creare più oggetti di sessione per ciascun archivio dati.

Questo articolo spiega come implementare un singleton lazy thread-safe per ogni tipo di sessione necessaria in modo da avere solo una sessione per archivio dati ma condivisa nell'intera applicazione.Quindi al massimo avrai solo 2 oggetti sessione.

Per rispondere direttamente alla tua domanda, tuttavia, avrai bisogno di 1 oggetto sessione per database.

Altri suggerimenti

Caso generale

La risposta nel caso generale è no, sono necessarie almeno sessioni diverse per il caso generale.

È possibile utilizzare una singola session factory utilizzando il file OpenSession sovraccarico prendendo una connessione aperta come argomento, consentendo di cambiare database per la sessione che lo richiede.

Ciò presenta alcuni inconvenienti, come la mancanza di rilascio automatico della connessione dopo le transazioni, la disabilitazione della cache di secondo livello, ...Secondo me è meglio avere due fabbriche di sessioni, piuttosto che fornire la propria connessione all'apertura della sessione.

Casi specifici del database

A seconda del server database che utilizzi, potresti essere in grado di utilizzare una singola stringa di connessione per accedere a entrambi con NHibernate.Se puoi utilizzare una singola stringa di connessione, puoi utilizzare una singola session factory e utilizzare la stessa sessione per accedere alle tue entità suddivise tra due database.

Caso più semplice

Utilizzando SQL Server, potresti avere i tuoi due database sullo stesso SQL Server.In tal caso, è possibile utilizzare una singola stringa di connessione e modificare il file catalog attribuire sul tuo <class> mappature per indicare in quale database si trova la tabella.(schema può essere utilizzato anche aggiungendo un punto.È disponibile in NHibernate da più tempo, quindi con una vecchia versione potresti averla solo schema.)

Naturalmente le credenziali di connessione devono essere valide per accedere ad entrambi i database.

Altri casi

Sempre utilizzando SQL Server, se il secondo database si trova su un altro server, è possibile utilizzare un server collegato.Regoleresti di nuovo il catalog attributo sulle classi che lo richiedono per specificare l'attributo appropriato linkedServerName.DbName.

Forse altri database potrebbero avere soluzioni simili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top