java hibernate 自定义排序_Hibernate----自定义数据类型

package org.william.First;

import org.hibernate.usertype.*;

import java.io.Serializable;

import java.sql.Types;

import java.util.List;

import java.util.ArrayList;

import java.util.Vector;

import org.hibernate.type.*;

import org.hibernate.*;

import javax.sql.*;

import java.sql.*;

/**

* @author wangliang138840

*

*/

public class EMailList implements UserType{

private List eMails;

private static final char SPLITE = ';';

//各个字段的类型

public static final int[] TYPES = new int[]{Types.VARCHAR };

//本实例是否可变

public boolean isMutable(){

return false;

}

//返回字段类型

public int[] sqlTypes(){

return TYPES;

}

//返回字段类型类

public Class returnedClass(){

return List.class;

}

/* (non-Javadoc)

* @see org.hibernate.usertype.UserType#deepCopy(java.lang.Object)

* 完全拷贝一个变量实体;

*/

public Object deepCopy(Object value) throws HibernateException{

List targetList = new ArrayList();

if(value == null)return targetList;

List sourceList = (List)value;

targetList.addAll(sourceList);

return targetList;

}

/* (non-Javadoc)

* @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object)

* 判断两个实体是否相等

*/

public boolean equals(Object x, Object y) throws HibernateException{

if( x == y) return true;

if(x != null && y != null){

List listX = (List)x;

List listY = (List)y;

if(listX.size() != listY.size()) return false;

for(int i = 0; i< listX.size(); i++){

String str1 = (String)listX.get(i);

String str2 = (String)listY.get(i);

if(!equals(str1,str2)) return false;

}

return true;

}

return false;

}

public int hashCode(Object x)

throws HibernateException{

return -1;

}

public Object nullSafeGet(ResultSet rs, String[] names, Object owner)

throws HibernateException, SQLException{

String value = (String)Hibernate.STRING.nullSafeGet(rs, names[0]);

if(value != null)return db2oo(value);

else return new ArrayList();

}

/* (non-Javadoc)

* @see org.hibernate.usertype.UserType#nullSafeSet(java.sql.PreparedStatement, java.lang.Object, int)

*/

public void nullSafeSet(PreparedStatement st, Object value, int index)

throws HibernateException, SQLException{

if(value != null){

Object str = oo2db(value);

Hibernate.STRING.nullSafeSet(st, str, index);

}else{

Hibernate.STRING.nullSafeSet(st, value, index);

}

}

/**

* @param value

* @return

*/

private Object oo2db(Object value){

StringBuffer strBuf = new StringBuffer();

List list = (List)value;

for(int i = 0; i

strBuf.append(list.get(i)).append(SPLITE);

}

strBuf.append(list.get(list.size()-1));

return (Object)strBuf.toString();

}

/**

* @param value

* @return

*/

private List db2oo(String value){

Vector strs = org.apache.tools.ant.util.StringUtils.split(value, SPLITE);

List emailList = new ArrayList();

for(int i = 0; i

emailList.add(strs.get(i));

}

return emailList;

}

/* (non-Javadoc)

* @see org.hibernate.usertype.UserType#assemble(java.io.Serializable, java.lang.Object)

*/

public Object assemble(Serializable cached, Object owner)

throws HibernateException{

return cached;

}

public Serializable disassemble(Object value)

throws HibernateException{

return (Serializable)value;

}

public Object replace(Object original, Object target, Object owner)

throws HibernateException{

return null;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值