[Hibernate求助]如何構造自己的對映型別?

yadan發表於2003-07-10
我在資料庫中儲存的欄位是TINYINT型別,想對映成java類中的Boolean(或者boolean)物件。我看了hibernate文件的4.2.4. Custom value types節,並自己寫了擴充套件了UserType類,如下:

/**
* 從java物件Boolean到sql中的TINYINT的對映
*/
public class BooleanMappingType implements UserType
{
   private static final int [] TYPE = {Types.TINYINT}; 
   
   public int[] sqlTypes()
   {
       return TYPE;
   }
   
   public Class returnedClass()
   {
       return Boolean.class;
   }
   
   public boolean equals(Object x, Object y) throws net.sf.hibernate.HibernateException
   {
       if( x.equals(y) ) return true;
       if( x == y)  return true;        
       return false;        
   }
   
   public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws net.sf.hibernate.HibernateException, java.sql.SQLException
   {
       Byte b = (Byte)Hibernate.BYTE.nullSafeGet(rs, names[0]);
       if( b == null)
           return Boolean.FALSE;
       if(b.intValue() != 0)
           return Boolean.TRUE;
       return Boolean.FALSE;
   }
   
   public void nullSafeSet(PreparedStatement psmt, Object value, int index) throws net.sf.hibernate.HibernateException, java.sql.SQLException
   {
       Boolean b = (value == null) ? Boolean.FALSE : (Boolean)value;
       Hibernate.BYTE.nullSafeSet(psmt, b, index);
   }
   
   public Object deepCopy(Object x) throws net.sf.hibernate.HibernateException
   {
       if(x.equals(Boolean.TRUE))
           return new Boolean(true);
       if(x.equals(Boolean.FALSE))
           return new Boolean(false);
       return null;
   }
   
   public boolean isMutable()
   {
       return true;
   }
}
<p class="indent">

還沒有測試,因為有一點疑問,這個類中,並沒有什麼方法表明資料庫中儲存的TINYINT值怎麼轉換成對應的Boolean物件,我自然是想資料庫中儲存1時轉換成TRUE,儲存0時轉換成FALSE。但在這個類中並沒有什麼方法申明啊。不知道如何解決這個問題。
另外,如果想把TINYINT列對映成java的原始型別boolean,又該如何解決。
想了很久,一直沒有弄出來,請大家幫忙看看,謝謝!

相關文章