Hibernate Interceptor : Contoh Mempermudah Hidup


Aku memiliki sejumlah class POJO yang di-map ke database. Setiap class tersebut punya atribut “createdDate” dan “updatedDate”. Sesuai namanya, “createdDate” akan menyimpan informasi kapan entitas tersebut dibuat, dan “updatedDate” akan menyimpan informasi kapan entitas tersebut terakhir kali dirubah. Seperti biasanya, aku harus mengisi nilai “createdDate” sebelum aku memanggil save(), dan aku harus mengisi nilai “updatedDate” sebelum memanggil update() atau merge(). Tapi kalau class-nya banyak, lama-lama bosan juga. Kenapa aku tidak mencoba memakai interceptor di Hibernate? Aku mulai dengan membuat sebuah class yang merupakan turunan dari EmptyInterceptor seperti berikut ini:

import java.util.*;
import java.io.*;

import org.hibernate.*;
import org.hibernate.type.Type;

public class TimeInfoInterceptor extends EmptyInterceptor {

  public boolean onSave(Object entity, Serializable id, Object[] state,
                                 String[] propertyName, Type[] types) {
     for (int i=0; i<propertyName.length; i++) {
        if ("createdDate".equals(propertyName[i])) {
           state[i] = new Date();
           return true;
        }
     }
     return false;
  }

  public boolean onFlushDirty(Object entity, Serializable id,
                                       Object[] currentState,
                                       Object[] previousState,
                                       String[] propertyNames,
                                       Type[] types) {

     for (int i=0; i<propertyNames.length; i++) {
        if ("updatedDate".equals(propertyNames[i])) {
           currentState[i] = new Date();
           return true;
        }
     }
     return false;
  }

}

Setelah itu, aku tinggal merubah sedikit kode yang berhubungan dengan pembuatan SessionFactory, dimana aku meminta agar seluruh session nantinya akan memakai class interceptor yang baru aku buat.

SessionFactory sessionFactory = new
   Configuration().configure().setInterceptor(
         new TimeInfoInterceptor()).buildSessionFactory();

Setelah program di-compile, aku mencoba membuat entitas baru dan meng-edit-nya. Kini, “createdDate” dan “updatedDate” secara otomatis sudah di-isi oleh Hibernate. Coding-pun menjadi lebih nyaman lagi.

Perihal Solid Snake
I'm nothing...

One Response to Hibernate Interceptor : Contoh Mempermudah Hidup

  1. Doez mengatakan:

    THx bos

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: