style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Como cambiar de base de datos en tiempo de ejecucion con hibernate.

Que tal, espero alguien quiera compartir algo para resolver mi duda.

Estoy trabajando en un proyecto donde conecto a una base de datos mediante hibernate, tengo mi archivo de configuracion "hibernate,cgf.xml" con el cual me conecto y realizo operaciones en una base de datos.

El problema es que en cierto punto, es necesario conectar a una base de datos distinta y hacer algunas consultas.

Si es posible me compartan un pequeño ejemplo.

Muchas gracias y agradesco de antemano cualquier ayuda brindada,

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Sr. Negativo

Re: cambiar base de datos en tiempo de ejecución con hibernate

No creo se pueda cambiar la base de datos en tiempo de ejecución, tal vez la solución es conectar las BD que necesites usar.
Puedes ver esto Conectar múltiples BD en Hibernateo aqui: Configurar múltiples BD

Imagen de ElderMael

Y que tal otro SessionFactory?

Y si crearas otro session factory apuntando a la otra base de datos?

Si usas Spring podrias usar un LocalSessionFactoryBuilder y hasta el xml te ahorras:

    @Bean
    public SessionFactory sessionFactory() throws Exception {
        return new LocalSessionFactoryBuilder(this.dataSource())
                .addAnnotatedClass(NewsEntry.class)
                .addProperties(hibernateProps()).buildSessionFactory();

    }

Imagen de ezamudio

dos sessionfactories

Apuntar el session factory existente a una nueva base de datos no me parece una buena idea porque vas a tener un estado inconsistente entre la base de datos y tus objetos en memoria.

Pero tener dos session factories como ya mencionaron, es perfectamente posible y así puedes interactuar con ambas. Solamente recuerda si vas a pasar objetos entre una y otra, que tienes que desligarlos de la sessionfactory de donde provienen y registrarlos o refrescarlos usando la segunda sessionfactory.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">