Je suis une nouvelle abeille chez Hibernate et j'essaie des choses… Une chose qui semble amuser tout, c'est comment se connecter à différentes bases de données?
J'ai lu dans un blog que nous pouvons créer différents fichiers de configuration et le faire .. J'ai essayé mais je n'ai pas réussi ... Voici ce que j'ai essayé:
SessionFactory sf = (SessionFactory) new Configuration().configure(path);
Où chemin est le chemin du fichier de configuration . Est-ce la bonne façon?
Utilisation des mappages d'annotations à titre d'exemple:
Configuration cfg1 = new AnnotationConfiguration();
cfg1.configure("/hibernate-Oracle.cfg.xml");
cfg1.addAnnotatedClass(SomeClass.class); // mapped classes
cfg1.addAnnotatedClass(SomeOtherClass.class);
SessionFactory sf1 = cfg1.buildSessionFactory();
Configuration cfg2 = new AnnotationConfiguration();
cfg2.configure("/hibernate-mysql.cfg.xml");
cfg2.addAnnotatedClass(SomeClass.class); // could be the same or different than above
cfg2.addAnnotatedClass(SomeOtherClass.class);
SessionFactory sf2 = cfg2.buildSessionFactory();
Ensuite, utilisez sf1 et sf2 pour obtenir les sessions pour chaque base de données. Pour les fichiers de mappage, utilisez simplement cfg.addClass au lieu de addAnnotatedClass. Placez les fichiers cfg.xml dans le package racine dans ce cas. Ceux-ci auront le dialecte Oracle ou MySQL et les informations de connexion.
Cela ne peut pas être fait avec un seul fichier de configuration Hibernate. Vous devez avoir deux fichiers de configuration pour cela.
Pour configurer la base de données mysql
hibernate-mysql.cfg.xml
Pour configurer la base de données Oracle
hibernate-Oracle.cfg.xml
Dans Détails, le fichier de configuration mysql
soit comme ceci.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">PASSWORD</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/UR_DB_NAME</property>
<property name="hibernate.connection.username">USERNAME</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping class="domain.EmployeeMysql"></mapping>
</session-factory>
</hibernate-configuration>
Dans Détails, le fichier de configuration Oracle
soit comme ceci.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">Oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.password">PASSWORD</property>
<property name="hibernate.connection.url">jdbc:Oracle:thin:UR DB NAME</property>
<property name="hibernate.connection.username">USERNAME</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<mapping class="domain.EmployeeOracleSql"></mapping>
</session-factory>
</hibernate-configuration>
Et le code devrait être comme ça.
configuration de mysql
private static SessionFactory sessionAnnotationFactory;
sessionAnnotationFactory = new Configuration().configure("hibernate-mysql.cfg.xml").buildSessionFactory();
Session session = sessionAnnotationFactory.openSession();
Configuration Oracle SQL
sessionAnnotationFactory = new Configuration().configure("hibernate-Oracle.cfg.xml").buildSessionFactory();
Session session = sessionAnnotationFactory.openSession()
Idéalement, vous devez passer au type de système de transaction distribuée [à l'aide de Java Transaction Analyzer org.hibernate.transaction.JTATransactionFactory] dans ce cas. Si vous utilisez JBoss App Server, vous pouvez le faire en utilisant "Gestionnaires de transactions distribuées". Vous pouvez en apprendre plus à ce sujet ici .
Vous pouvez également ajouter une classe de mappage dans le fichier configuration.xml.
Remarque: il s’agit des annotations et des ressources, utilisez le mot-clé resources au lieu de la classe
<mapping class="packageName.classNmae1"/>
<mapping class="packageName.classNmae2"/>