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
Genellikle şöyle yaparız. Nesne Second level cache'ten okununca çağrılır..
Genellikle şöyle yaparız
Genellikle şöyle yaparız. Nesne Second level cache'te saklanmadan önce çağrılır.
Genellikle şöyle yaparız. Eğer iki nesnenin referansı aynı ise Hibernate nesneyi tekrar veritabanına yazmaz.
Genellikle şöyle yaparız.
Genellikle şöyle yaparız. Bu kod ile veritabanından yüklenen değeri değiştirip tekrar kaydetmek istemediğimizi belirtiyoruz.
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ş.
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.
Şöyle yaparız
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ş.
PrepararedStatement'a yazmak için şöyle yaparız.
Detached nesneyi merge etmek için çağrılır.
Örnek
Genellikle şöyle yaparız.
Şöyle yaparız.
İ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.
Şöyle yaparız.
sqlTypes metodu
char sütun tipi için şöyle yaparız.
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 metoduGenellikle şöyle yaparız. Nesne Second level cache'ten okununca çağrılır..
@Override
public Object assemble(Serializable cached, Object owner) {
return cached;
}
deepCopy metoduGenellikle şöyle yaparız
@Override
public Object deepCopy(Object value) {
return value;
}
disassemble metoduGenellikle şöyle yaparız. Nesne Second level cache'te saklanmadan önce çağrılır.
@Override
public Serializable disassemble(Object o) {
return (Serializable) o;
}
equals metoduGenellikle şö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 metoduGenellikle şöyle yaparız.
@Override
public int hashCode(Object x) {
return x.hashCode();
}
isMutable metoduGenellikle şö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 metoduHibernate 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 ;
ÖrnekResultSet 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 metoduHibernate 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;
ÖrnekPrepararedStatement'a yazmak için şöyle yaparız.
if (value == null) {
st.setNull(index, Types.CHAR);
} else {
st.setString(index, String.valueOf(value));
}
replace metoduDetached 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};
}