私が知っているもう1つの拡張ポイントは、契約を使用することです
org.hibernate.usertype.UserType
実装する必要のあるより重要なメソッドは、nullSafeSetとnullSafeGetです。これらは、Hibernateがオブジェクトを「ハイドレイト」する前にResultSetからjavaオブジェクトに値を変換するために必要なフックを提供し、その逆も同様です。
例えば
public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
String value = rs.getString(names[0]);
if(value==null) {
//handle this
}
//handle other possibilities like Si/No or whatever here
return "s".equals(value) ? Boolean.TRUE : Boolean.FALSE;
}
public void nullSafeSet(PreparedStatement st, Object value, int index)
throws HibernateException, SQLException {
if (value==null) {
//handle this
return;
}
Boolean bValue = (Boolean) value;
if(bValue) {
st.setString("s", index);
} else {
st.setString("n", index);
}
//handle other possibilities like Si/No or whatever here
}
次に、UserType実装をHibernateに認識させるだけです。これは、Hibernateマッピングでtypedef要素として実行するか、UserTypeが適用可能なプロパティ要素のtype属性を使用するだけで実行できます。