14 Ekim 2018 Pazar

hibernate.cfg.xml Dosyası - Session Factory Ayarları

Giriş
Açıklaması şöylehibernate.properties dosyasını ezer.
An alternative approach to configuration is to specify a full configuration in a file named hibernate.cfg.xml. This file can be used as a replacement for the hibernate.properties file or, if both are present, to override properties.
Bu dosyada Hibernate'in çalışması için gerekli ayarlar bulunur. Ayarlar SessionCache vs gibi şeylerle ilgilidir.

Bağlantı için kullanılan parametreleri hibernate.cfg.xml - Connection yazısına taşıdım. Diğer parametreler çalışma şeklini değiştiriyor.

Archive
Hem hbm.xml hem de anotasyonları yüklemek için şöyle yaparız. Sadece anotasyonlu sınıfları eklemek için class değerini atarız.
<property name="hibernate.archive.autodetection" value="class, hbm" />
Enable_lazy_load_no_trans - Kullanmayın
Session kapatılsa bile lazy load edilen nesneler için altta yeni bir bağlantı açar. Şöyle yaparız.
<prop key="hibernate.enable_lazy_load_no_trans">true</prop>
globally_quoted_identifiers
Şöyle yaparız.
setProperty("hibernate.globally_quoted_identifiers", "true");
Diğer
Yüklenecek sınıflar hbm.xml dosyalarında bulunur.

dialect
Şu değerler olabilir.
org.hibernate.dialect.MySQLDialect
org.hibernate.dialect.Oracle9Dialect (deprecated)
org.hibernate.dialect.OracleDialect (deprecated)
org.hibernate.dialect.Oracle10gDialect
org.hibernate.dialect.PostgreSQLDialect
org.hibernate.dialect.PostgreSQL9Dialect


hbm2ddl.auto
hbm2ddl yazısına taşıdım.

mapping
Hibernate'in package scan özelliği olmadığı için Session tarafından tanınan sınıfları amelece elle yazmak gerekir. Şöyle yaparız
<mapping class="entities.Contact"/>
<mapping class="entities.Disaggregated"/>
<mapping class="entities.DissagregatedCombined"/>
<mapping class="entities.Legacy"/>
<mapping class="entities.LegacyCombined"/>
<mapping class="entities.Login"/>
<mapping class="entities.Register"/>
<mapping class="entities.NetCurrency"/>
<mapping class="entities.NetFinancial"/>
<mapping class="entities.NetEnergy"/>
<mapping class="entities.NetMetals"/>
<mapping class="entities.NetGrains"/>
<mapping class="entities.NetLivestock"/>
query.substitutions
true 1, false 0 olabilir

JNDI
Örnek
JNDI DataSource kullanmak için şöyle yaparız.
<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.datasource">
      java:comp/env/jdbc/webApplication</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.current_session_context_class">
      org.hibernate.context.internal.ThreadLocalSessionContext
    </property>
    <!-- Mapping with model class containing annotations -->
    <mapping class="com.jsp.Employee"/> 
  </session-factory>
</hibernate-configuration>
current_session_context_class değeri olarak thread veya jta verilebilir.

Oracle
Şöyle yaparız.
<?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>
    <!-- Database connection settings -->
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property> 
    <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl
    </property>
    <property name="hibernate.connection.username">cosmin</property>
    <property name="hibernate.connection.password">123456</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.connection.release_mode">auto</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.connection.autoReconnect">true</property>

    <mapping class="vmproj.model.entity.DenominationCount" />

  </session-factory>
</hibernate-configuration>
PostGreSQL
Şöyle yaparız.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

  <session-factory>

   <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
   <property name="hibernate.connection.url">jdbc:postgresql://a.b.c:5432/test</property>
   <property name="hibernate.connection.username">user</property>
   <property name="hibernate.connection.password">password</property>

   <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>

   <property name="hibernate.default_schema">dess6n165jarrv</property>
   <property name= "hbm2ddl.auto">update</property>

   <property name="hibernate.current_session_context_class">thread</property>

  </session-factory>

</hibernate-configuration>

hibernate.cfg.xml Dosyası - Connection Ayarları

Giriş
hibernate.properties dosyasındaki key değerler genellikle
hibernate.connection.driver=XXX şeklinde yazılıyor.

hibernate.cfg.xml dosyasında ise genellikle
connection.driver=XXX şeklinde yazılıyor yani hibernate kısmı atlanabilir.

connection.charset
Şöyle yaparız.
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property> 
<property name="show_sql">true</property>
<property name="hibernate.connection.CharSet">utf8</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.useUnicode">true</property>
<property name="hibernate.connection.driver_class">
  com.mysql.jdbc.Driver
</property>
connection.driver_class
Şu değerler olabilir.
com.mysql.jdbc.Driver
org.postgresql.Driver
oracle.jdbc.driver.OracleDriver
Örnek
Şöyle yaparız
<hibernate-configuration>

  <session-factory>

    <!-- JDBC Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/student</property>
    <property name="connection.username">hbstudent</property>
    <property name="connection.password">hbstudent</property>

    <!-- JDBC connection pool settings ... using built-in test pool -->
    <property name="connection.pool_size">1</property>

    <!-- Select our SQL dialect -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

    <!-- Echo the SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Set the current session context -->
    <property name="current_session_context_class">thread</property>

    </session-factory>

</hibernate-configuration>
connection.url
Örnek
jdbc:postgresql://a.b.c.d:5432/testdb
Örnek
Şöyle yaparız.
<property name="connection.url">jdbc:mysql://localhost:3306/reports?useSSL=true</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">***</property>
<property name="connection.password">***</property>
connection.username
Kullanıcı adı

hibernate.connection.password
Kullanıcı şifresi

hibernate.connection.pool_size
Şöyle yaparız.
<?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="dialect">org.hibernate.dialect.PostgreSQL9Dialect</property>
    <property name="connection.driver_class">org.postgresql.Driver</property>
    <property name="connection.url">jdbc:postgresql://localhost:5432/postgres</property>
    <property name="connection.username">pavel</property>
    <property name="connection.password">31228900</property>
    <property name="connection.pool_size">10</property>
    <property name="hbm2ddl.auto">create</property>

    <mapping resource="planetofUsers.cfg.xml"/>

  </session-factory>

</hibernate-configuration>
hibernate.connection.release_mode
Şu değerler olabilir. Varsayılan değer auto olduğu için xml'de belirtmeye gerek yok
auto
on_close
after_transaction
after_statement