How to manipulate several banks with Hibernate?

Asked

Viewed 156 times

3

I am testing the functioning of Hibernate and I came across a question. I have the following configuration:

Hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/dbFatura?useTimezone=true&amp;serverTimezone=UTC</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.pool_size">1</property>
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>

        <!-- <mapping resource="org/hibernate/tutorial/domain/Fatura.hbm.xml"/> -->
        <mapping class="org.hibernate.tutorial.domain.Fatura"/>

    </session-factory>

</hibernate-configuration>

Sessionfactory

private static SessionFactory buildSessionFactory() {
        try{
            return new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation factory failed. " + ex);
            throw  new ExceptionInInitializerError(ex);
        }
    }

In this configuration, I am determining the bank I will use in case the dbFatura:

<property name="connection.url">jdbc:mysql://localhost/dbFatura?useTimezone=true&amp;serverTimezone=UTC</property>

The mapping and data manipulation, works correctly. But, here comes the doubts:

  • Is it possible to manipulate multiple banks in the same application? (ex: dbFatura, dbMovimentions)

  • If possible, how to change the bank in the execution of the class?

  • I can create multiple files .xml, to move each seat separately from the SessionFactory?

  • Here’s what you need: https://stackoverflow.com/questions/1921865/how-to-connect-to-multiple-databases-in-hibernate

1 answer

0


An alternative found, to be able to use two databases, is to create two configuration files of the hibernate and handle according to use:

Hibernate-Event.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>

        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/event?useTimezone=true&amp;serverTimezone=UTC</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.pool_size">1</property>
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>

    <mapping class="org.hibernate.Event"/>

    </session-factory>
</hibernate-configuration>

Hibernate-client.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>

        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/client?useTimezone=true&amp;serverTimezone=UTC</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.pool_size">1</property>
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>

    <mapping class="org.hibernate.Client"/>

    </session-factory>
</hibernate-configuration>

In the utility class, which manipulates the creation of the Session, when the method is called, it takes the name of the file you want to manipulate and starts the connection according to the file you choose (the database file 1 or the database file 2):

Hibernateutil.java

public class HibernateUtil {
    private static SessionFactory sessionFactory;

    private static SessionFactory buildSessionFactory(String configFile) {
        try{
            configFile += ".cfg.xml";
            return new Configuration().configure(configFile).buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation factory failed. " + ex);
            throw  new ExceptionInInitializerError(ex);
        }
    }
}

And finally, in the class that handles the database data, for each specific method, it is necessary to pass the database file you want to work with.

Managerdatabase.java

Select all customers:

public List<Cliente> selectAllClients() {
    List<Cliente> result;
    try {
        session = HibernateUtil.getSessionFactory("hibernate-client").openSession();
        tx = session.beginTransaction();

        query = session.createQuery("FROM clients");

        result = query.list();

        tx.commit();
    } catch (HibernateException he) {
        System.out.println("Was found an error in execution!" + he.getCause());
        result = null;
        return result;
    } finally {
        closeSession();
    }
    return result;
}

Select all the events:

public List<Cliente> selectAllEvents() {
    List<Cliente> result;
    try {
        session = HibernateUtil.getSessionFactory("hibernate-event").openSession();
        tx = session.beginTransaction();

        query = session.createQuery("FROM events");

        result = query.list();

        tx.commit();
    } catch (HibernateException he) {
        System.out.println("Was found an error in execution!" + he.getCause());
        result = null;
        return result;
    } finally {
        closeSession();
    }
    return result;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.