ఒకే సమయంలో రెండు స్థావరాలతో పని చేయడం

మీరు ఒకే సమయంలో రెండు స్థావరాలతో పని చేయవలసి వచ్చినప్పుడు చాలా తరచుగా పరిస్థితులు ఉన్నాయి. ఉదాహరణకు, మీరు ఒక డేటాబేస్ నుండి డేటాను చదివి, దాన్ని ప్రాసెస్ చేసి మరొకదానికి వ్రాయండి.

లేదా మరింత సాధారణం. మీ అప్లికేషన్ పని చేయడానికి ఒక స్థానిక డేటాబేస్ను కలిగి ఉంది మరియు SQL డేటా ప్రశ్న ఆకృతికి మద్దతు ఇచ్చే వివిధ రిమోట్ మూలాల నుండి డేటాను కూడా చదవగలదు. ఉదాహరణకు ఎక్సెల్.

ఈ రిమోట్ డేటా మూలాధారాల కోసం, మీ హైబర్నేట్ మ్యాపింగ్‌ను అనుకూలీకరించడం చాలా ఉపయోగకరంగా ఉంటుంది, తద్వారా అప్లికేషన్ యొక్క వ్యాపార లాజిక్ సరళంగా ఉంటుంది మరియు జావా ఆబ్జెక్ట్‌లతో మాత్రమే పని చేస్తుంది.

దీన్ని చేయడానికి సులభమైన మార్గం బహుళ కాన్ఫిగరేషన్ ఫైల్‌లను కలిగి ఉండటం. ఉదాహరణకు, ఇలా:

hibernate_oracle.cfg.xml
<hibernate-configuration>
   <session-factory>
      <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
      <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
      <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
      <property name="hibernate.connection.username">system</property>
      <property name="hibernate.connection.password">secret<property>
 
      <mapping resource="com/codegym/hibernate/multipledatabase/employee.hbm.xml"/>
   </session-factory>
</hibernate-configuration>
hibernate_mysql.cfg.xml
<hibernate-configuration>
   <session-factory>
      <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/employee</property>
      <property name="hibernate.connection.username">root</property>
      <property name="hibernate.connection.password">secret</property>
 
      <mapping resource="com/codegym/hibernate/multipledatabase/employee.hbm.xml"/>
   </session-factory>
</hibernate-configuration>

బాగా, అన్ని హైబర్నేట్ ప్రారంభ కోడ్ వాస్తవానికి నకిలీ చేయబడింది:

Configuration oracleCfg = new Configuration();
oracleCfg.configure("/com/codegym/hibernate/multipledatabase/hibernate_oracle.cfg.xml");
SessionFactory oracleSessionFactory = oracleCfg.buildSessionFactory();
Session oracleSession = oracleSessionFactory.openSession();

Configuration mysqlCfg = new Configuration();
mysqlCfg.configure("/com/codegym/hibernate/multipledatabase/hibernate_mysql.cfg.xml");
SessionFactory mySqlSessionFactory = mysqlCfg.buildSessionFactory();
Session mysqlSession = mySqlSessionFactory.openSession();

Employee emp = oracleSession.get(Employee.class, "E0087");
System.out.println("Employee retrived from Oracle Database");

Transaction tx = mysqlSession.beginTransaction();
mysqlSession.save(emp);
tx.commit();
System.out.println("Employee inserted in MySQL Database");

మెమరీలో బేస్

DBMS ఉన్నాయి, అవి పూర్తిగా మెమరీలో ఉన్న డేటాబేస్. ఇటువంటి DBMSలు తరచుగా లైబ్రరీల వలె పంపిణీ చేయబడతాయి మరియు సాధారణ అప్లికేషన్‌లో చేర్చడం సులభం. ఇటువంటి DBMS, ఉదాహరణకు, H2 లేదా Hsqldb.

మీరు వాటిని ఇతర లైబ్రరీల మాదిరిగానే మీ ప్రాజెక్ట్‌కి జోడించవచ్చు - మావెన్‌లో డిపెండెన్సీని ఉపయోగించి:

hsqldb
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.6.1</version>
	<scope>test</scope>
</dependency>

మరియు వెంటనే రెండవ బేస్ యొక్క ఉదాహరణ:

H2 డేటాబేస్
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.1.214</version>
    <scope>test</scope>
</dependency>

సాధారణ డేటాబేస్‌ల మాదిరిగానే మీరు వారితో పనిని కాన్ఫిగర్ చేయవచ్చు. కానీ సౌలభ్యం కోసం కొన్ని ఉదాహరణలు ఇద్దాం:

hsqldb
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.hsqldb.jdbc.JDBCDriver</property>
        <property name="hibernate.connection.url">jdbc:hsqldb:mem:test</property>
        <property name="hibernate.connection.username">sa</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">create-drop</property>
        <property name="hibernate.current_session_context_class">thread</property>
    </session-factory>
</hibernate-configuration>

రెండు కాన్ఫిగరేషన్‌ల మధ్య కీలక వ్యత్యాసం connection.url:

H2 డేటాబేస్
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.h2.Driver</property>
        <property name="hibernate.connection.url">jdbc:h2:mem:test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
	    <property name="hibernate.hbm2ddl.auto">create-drop</property>
        <property name="hibernate.current_session_context_class">thread</property>
    </session-factory>
</hibernate-configuration>