Ana içeriğe geç

Hibernate Plugin#

Proje içerisinde Hibernate teknolojisi kullanılması durumunda 'Bytecode Enchancement' desteğini sağlamaktadır. Bu yöntem ile veritabanı nesnelerinin(entity) class(bytecode) dosyalarında performans artırmak için değişiklikler yapmaktadır. Böylelikle runtime da veritabanı işlemlerinde performans artırımı sağlanmaktadır.

Yetenekleri#

  • Lazy state initialization: Lazy loading yeteneklerini runtime bytecode enhancement ile aktif hale getirebilir. Bu yöntemle @Basic(fetch = FetchType.LAZY)) gibi basit tipler bile lazy olarak çekilebilir.
  • Dirtiness tracking: Değişen alanların takibini sağlamak amacıyla dirty tracking yeteneği aktifleştirilebilir.
  • Automatic bi-directional association management: Association management yeteneği ile entityler arasındaki çift yönlü ilişkileri otomatik olarak senkronize edebilir.
  • Performans optimizasyonları

Kullanım#

Projelere iki farklı yöntem ile eklenebilmektedir. Yöntemler şunlardır:

DSL kullanımı

build.gradle
plugins {
    id 'hvl-hibernate-plugin' version hvlHibernatePluginVersion
}

Buildscript kullanımı

build.gradle
buildscript {
    repositories {
        maven {
            url 'http://nexus.bulut.ai/repository/framework-plugin-group/'
        }
    }
    dependencies {
        classpath(group: 'tr.com.havelsan.plugin', name: 'hvl-gradle-hibernate-plugin', version: hvlHibernatePluginVersion)
    }
}

apply plugin: 'hvl-hibernate-plugin'

Pluginin birçok konfigurasyon parametresi bulunmaktadır. Proje içerisinde kullanımı ve parametreler aşağıdaki gibidir.

Konfigurasyon yapısı#

build.gradle
hvlHibernate {
  enhance {
    // @Lazy alanların yüklemesi işlemiinde iyileştirme yapılıp yapılmayacağı
    enableLazyInitialization = true

    // Nesne üzerinde değişiklik yapılan alanların izinin tutulup tutulmayacağı
    enableDirtyTracking = true

    // Çift yönlü ilişki yönetiminin yapılıp yapılmayacağı
    enableAssociationManagement = true

    // İlişkisel nesnelerin performans optimızasyonunun yapılıp yapılmayacağı
    enableExtendedEnhancement = false
  }
}

enableExtendedEnhancement konfigürasyonu tüm ilişkisel nesne yapılarını tarayıp kod üreteceği için kullanırken çok dikkatli olunmalıdır. İstenmeyen davranışların ortaya çıkmasına neden olabilir. Gerekmedikçe kullanılması önerilmez.

Detaylı bilgiler için linkler: