Giriş
Bir sütun veritabanından okunurken veya yazılırken çevrim için kullanılmasını istediğimiz sınıfı belirtmek için kullanılır. @Type anotasyonu ile kullanılır
Örnek
Şöyle
yaparız
@Type(type = "com.vladmihalcea.book.hpjp.hibernate.type.CharacterType")
@Column(name = "event_type")
private Character type;
assemble metodu
Genellikle şöyle
yaparız. Nesne Second level cache'ten okununca
çağrılır..
@Override
public Object assemble(Serializable cached, Object owner) {
return cached;
}
deepCopy metodu
Genellikle şöyle
yaparız
@Override
public Object deepCopy(Object value) {
return value;
}
disassemble metodu
Genellikle şöyle
yaparız. Nesne Second level cache'te saklanmadan önce
çağrılır.
@Override
public Serializable disassemble(Object o) {
return (Serializable) o;
}
equals metodu
Genellikle şöyle
yaparız. Eğer iki nesnenin referansı aynı ise Hibernate nesneyi tekrar veritabanına
yazmaz.
@Override
public boolean equals(Object x, Object y) {
return Objects.equals(x, y);
}
hashCode metodu
Genellikle şöyle
yaparız.
@Override
public int hashCode(Object x) {
return x.hashCode();
}
isMutable metodu
Genellikle şöyle
yaparız. Bu kod ile veritabanından yüklenen değeri değiştirip tekrar kaydetmek istemediğimizi
belirtiyoruz.
@Override
public boolean isMutable() {
return false;
}
nullSafeGet metodu
Hibernate 5 ile imzası
şöyle. Hibernate 4 ve daha eski sürümlede bu metodun imzası hep değişmiş. Hibernate 3'ten Hibernate 4'e geçerken
değişmiş.
@Override
public Object nullSafeGet(ResultSet rs, String[] names,
SharedSessionContractImplementor session, Object owner)
throws HibernateException, SQLException ;
Eski imzası
şöyle.
@Override
public Object nullSafeGet(ResultSet rs, String[] names, Object owner)
throws HibernateException, SQLException ;
Örnek
ResultSet nesnesinden okumak için şöyle yaparız. İlk sütunu okuruz, eüer string var ise ilk karakteri döneriz, yok ise null döneriz. Metodun imzası Object döndüğü için Character dönmek sorun değil.
String value = rs.getString(names[0]);
return (value != null && value.length() > 0) ?
value.charAt(0) : null;
Örnek
Şöyle
yaparız
@Override
public Object nullSafeGet(ResultSet resultSet, String[] names,
SessionImplementor session, Object owner)
throws HibernateException, SQLException {
if (resultSet.getArray(names[0]) == null) {
return new String[0];
}
Array array = resultSet.getArray(names[0]);
@SuppressWarnings("unchecked")
T javaArray = (T) array.getArray();
return javaArray;
}
nullSafeSet metodu
Hibernate 5 ile imzası
şöyle. Hibernate 4 ve daha eski sürümlede bu metodun imzası hep değişmiş. Hibernate 3'ten Hibernate 4'e geçerken
değişmiş.
@Override
public void nullSafeSet(PreparedStatement st, Object value, int index,
SharedSessionContractImplementor session)
throws HibernateException, SQLException;
Eski imzası
şöyle.
@Override
public void nullSafeSet(PreparedStatement st, Object value, int index)
throws HibernateException, SQLException;
Örnek
PrepararedStatement'a yazmak için şöyle
yaparız.
if (value == null) {
st.setNull(index, Types.CHAR);
} else {
st.setString(index, String.valueOf(value));
}
replace metodu
Detached nesneyi merge etmek için
çağrılır.
Örnek
Genellikle şöyle
yaparız.
@Override
public Object replace(Object o, Object target, Object owner) {
return o;
}
Örnek
Şöyle
yaparız.
@Override
public Object replace(Object original, Object target, Object owner)
throws HibernateException {
return original;
}
returnedClass metodu
İmzası
şöyle. Bu sınıfın okuyup yazdığı kendi kodumuzdaki sınıf tipini belirtir. @Type ile verilen ilk örnekte bizim kodumuz Character nesnesidir. Foo da olabilirdi.
@Override
public Class returnedClass();
Örnek
Şöyle
yaparız.
public class GenericStringArrayUserType<T extends Serializable> implements UserType {
private Class<T> typeParameterClass;
@Override
public Class<T> returnedClass() {
return typeParameterClass;
}
}
sqlTypes metodu
char sütun tipi için şöyle
yaparız.
@Override
public int[] sqlTypes() {
return new int[]{Types.CHAR};
}