Hibernate audit için farklı bir şema kullanıldığında, hbm2ddl update modunda revinfo tablosu diğer şemada oluşuyor. Konfigürasyon dosyamızda org.hibernate.envers.default_schema olara audit şemasını gösteriyoruz. Audit tabloları bu şemada oluşmasına rağmen revinfo tablosu hibernate.default_schema'da tanımlanan şemada oluşuyor. Bu da, revinfo tablosu ile diğer tablolar arasındaki foreign key'in oluşamamasına sebep oluyor.

Hibernate versiyonu: 3.6.7

Oracle versiyonu : 11G 11.2.0.3.0 64bit

Burada hibernate ekibine bir case açılmış. 3.6.4 ve 4.0.0.Alpha3 versiyonlarında düzeldiği söyleniyor ancak Hibernate 4.2.4 versiyonunda test ettiğimizde bu versiyonda da düzelmediğini gördük. Workaround olarak, custom RevisionEntity oluşturup @javax.persistence.Table(schema="mydb_aud") şeklinde bir setleme yapılması önerilmiş ancak development-production arasında ve diğer müşterilerde audit şemaları farklı olabileceği için bu şekilde bir tanım kod bütünlüğünü bozuyor. Schema parametresini bir property dosyasından okutmayı denediğimizde, annotation property'lerine property dosyasından bir değer setlenemediğini gördük. Bu konu ile ilgili bir çözüm öneriniz var mı?

soruldu: 05 Eyl '13, 07:00

bts's gravatar image

bts
41224
cevap kabul oranı: 0%

değiştirildi: 06 Eyl '13, 09:39

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183


Merhabalar,

anlattigin gibi version 4.0.0 dan sonra bu bugi düzeltmisler. Ben o yüzden kücük bir test yaptim. Tam istedigin gibi de calisiyor.

Bunun icin Spring + Hibernate(4.2.5.Final) kullandim.(JPAsiz) DBde de H2 yi sectim.

   spring context:

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${jdbc.dialect}</prop>
            <prop key="org.hibernate.envers.default_schema">EGAL</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.show_sql">true</prop>
             <prop key="hibernate.current_session_context_class">thread</prop>
        </props>
   </property>

ve

    hibernate.cfg.xml
<listener class="org.hibernate.envers.event.AuditEventListener" type="post-insert"/>
<listener class="org.hibernate.envers.event.AuditEventListener" type="post-update"/>
<listener class="org.hibernate.envers.event.AuditEventListener" type="post-delete"/>
<listener class="org.hibernate.envers.event.AuditEventListener" type="pre-collection-update"/>
<listener class="org.hibernate.envers.event.AuditEventListener" type="pre-collection-remove"/>
<listener class="org.hibernate.envers.event.AuditEventListener" type="post-collection-recreate"/>

Sonuc: (EGAL -> diger schema)

    Hibernate: insert into EMPLOYEE (ID, EMAIL, FIRSTNAME, LASTNAME, TELEPHONE) values (null, ?, ?, ?, ?)
    Hibernate: insert into EGAL.REVINFO (REV, REVTSTMP) values (null, ?)
    Hibernate: insert into EGAL.EMPLOYEE_AUD (REVTYPE, EMAIL, FIRSTNAME, LASTNAME, TELEPHONE, ID, REV) values (?, ?, ?, ?, ?, ?, ?)

Acaba senin ayarlarinda bir yanlis mi var?

iyi calismalar

permanent link

cevaplandı: 05 Eyl '13, 09:20

mahmut_can's gravatar image

mahmut_can ♦
2.9k62552
cevap kabul oranı: 67%

değiştirildi: 05 Eyl '13, 09:22

Bizdeki ayarlar şu şekilde:

Property dosyası:

    ################JDBC Configuration#######################
    hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
    jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
    jdbc.url=jdbc:oracle:thin:test3/test3@192.168.34.1:1521:dbtest
    jdbc.hibernate.hbm2ddl=update
    jdbc.username=test3
    jdbc.password=test3
    hibernate.show_sql=true
    ################End Of JDBC Configuration#######################

    ################Audit JDBC Configuration#######################
    jdbc.audit.driverClassName=oracle.jdbc.driver.OracleDriver
    jdbc.audit.url=jdbc:oracle:thin:test3_audit/test3_audit@192.168.34.1:1521:dbtest
    jdbc.audit.username=test3_audit
    jdbc.audit.password=test3_audit
    ###############End Of Audit JDBC Configuration#######################

    ################CP3O Pooling  Configuration#######################
    cp3o.initialPoolSize=5
    cp3o.minPoolSize=5
    cp3o.maxPoolSize=200
    cp3o.idleConnectionTestPeriod=300
    cp3o.acquireIncrement=5
    cp3o.maxStatements=1000
    cp3o.numHelperThreads=5
    ################End Of CP3O Pooling  Configuration#######################

Spring Context:

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="namingStrategy" ref="namingStrategy" />
       <property name="hibernateProperties">
         <props>
         <prop key="hibernate.default_schema">${jdbc.username}</prop>
         <prop key="hibernate.dialect">${hibernate.dialect}</prop>
         <prop key="hibernate.show_sql">true</prop>
         <prop key="hibernate.format_sql">true</prop>
         <prop key="hibernate.hbm2ddl.auto">${jdbc.hibernate.hbm2ddl}</prop>
         <prop key="hibernate.connection.release_mode">auto</prop>

         <prop key="org.hibernate.envers.default_schema">${jdbc.audit.username}</prop>
         <prop key="org.hibernate.envers.store_data_at_delete">true</prop>
         <prop key="org.hibernate.envers.revision_field_name">id_revinfo</prop>
         <prop key="org.hibernate.envers.revision_type_field_name">rev_type</prop>
         </props>
        </property>
    </bean>
    <bean id="namingStrategy" class="org.hibernate.cfg.ImprovedNamingStrategy" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
 <property name="driverClass">
 <value>${jdbc.driverClassName}</value>
 </property>
 <property name="jdbcUrl">
 <value>${jdbc.url}</value>
 </property>
 <property name="user">
 <value>${jdbc.username}</value>
 </property>
 <property name="password">
 <value>${jdbc.password}</value>
 </property>
 <property name="initialPoolSize">
 <value>${cp3o.initialPoolSize}</value>
 </property>
 <property name="minPoolSize">
 <value>${cp3o.minPoolSize}</value>
 </property>
 <property name="maxPoolSize">
 <value>${cp3o.maxPoolSize}</value>
 </property>
 <property name="idleConnectionTestPeriod">
 <value>${cp3o.idleConnectionTestPeriod}</value>
 </property>
 <property name="acquireIncrement">
 <value>${cp3o.acquireIncrement}</value>
 </property>
 <property name="maxStatements">
 <value>${cp3o.maxStatements}</value>
 </property>
 <property name="numHelperThreads">
 <value>${cp3o.numHelperThreads}</value>
 </property>
</bean>

Tekrar test ettim, test3_audit şemasını sıfırlayıp hbm2ddl update ile spring'i ayağa kaldırdığımda audit tabloları test3_audit şemasında oluşmasına rağmen revinfo tablosu test3 şemasında oluştu.

permanent link

cevaplandı: 09 Eyl '13, 01:57

bts's gravatar image

bts
41224
cevap kabul oranı: 0%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,077
×109

Soruldu: 05 Eyl '13, 07:00

Görüntüleme: 1,039 kez

Son güncelleme: 09 Eyl '13, 01:57

powered by BitNami OSQA