📄 questionusertype.java
字号:
package tarena.util;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.*;
import org.hibernate.usertype.UserType;
public class QuestionUserType implements UserType, java.io.Serializable {
public Object replace(Object arg0, Object arg1, Object arg2) throws HibernateException {
return null;
}
// 返回所映射字段的SQL类型(java.sql.Types)
public int[] sqlTypes() {
return new int[] { Types.VARCHAR };
}
// 所返回的自定义数据类型
public Class returnedClass() {
return List.class;
}
/**
* 自定义数据类型的比对方法 此方法将用作脏数据检查,参数arg0,arg1分别为数据的两个副本 如果equals方法返回false,
* 则Hibernate将认为数据发生变化,并将变化更新到库表中
*/
public boolean equals(Object arg0, Object arg1) throws HibernateException {
if (arg0 == arg1)
return true;
if (arg0 != null && arg1 != null) {
List list1 = (List) arg0;
List list2 = (List) arg1;
if (list1.size() != list2.size())
return false;
for (int i = 0; i < list1.size(); i++) {
String str1 = (String) list1.get(i);
String str2 = (String) list2.get(i);
if (!str1.equals(str2))
return false;
}
return true;
}
return false;
}
/**
* 从ResultSet中读取数据,将其转换为自定义类型返回
*/
public Object nullSafeGet(ResultSet arg0, String[] arg1, Object arg2)
throws HibernateException, SQLException {
String str = (String) Hibernate.STRING.nullSafeGet(arg0, arg1[0]);
if (str == null || str.trim().length()<1)
return null;
else {
List result = new ArrayList();
String[] sa = str.split(ContextUtil.DILIM);
for (int i = 0; i < sa.length; i++) {
result.add(sa[i]);
}
return result;
}
}
/*
* 在Hibernate进行数据保存时调用 将自定义数据写入对应的库表字段
*/
public void nullSafeSet(PreparedStatement arg0, Object arg1, int arg2)
throws HibernateException, SQLException {
if (arg1 == null)
Hibernate.STRING.nullSafeSet(arg0, null, arg2);
else {
List l = (List) arg1;
if (l.size() < 1)
Hibernate.STRING.nullSafeSet(arg0, null, arg2);
else {
StringBuffer str = new StringBuffer();
for (int i = 0; i < l.size() - 1; i++) {
str.append(l.get(i).toString() + ContextUtil.DILIM);
}
str.append(l.get(l.size() - 1));
Hibernate.STRING.nullSafeSet(arg0, str.toString(), arg2);
}
}
}
/**
* 完全复制对象,原始版本用作脏数据检查,将完全拷贝返回给用户使用
*/
public Object deepCopy(Object arg0) throws HibernateException {
List source = (List) arg0;
List target = new ArrayList();
if(source!=null)
target.addAll(source);
return target;
}
/*
* 本类型实例是否可变
*/
public boolean isMutable() {
return false;
}
public Object assemble(Serializable arg0, Object arg1) throws HibernateException {
// TODO Auto-generated method stub
return null;
}
public Serializable disassemble(Object arg0) throws HibernateException {
// TODO Auto-generated method stub
return null;
}
public int hashCode(Object arg0) throws HibernateException {
// TODO Auto-generated method stub
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -