要往数据库添加一条记录一般做法是new一个这个类的实例,然后给这个对象赋值,然后调用getHibernateTemplate().save(objs);由于要保存的对象和数据库里的一条数据极其相似,先去数据库查询该条数据,产生一个实例对象,这条数据是由二个字段组成的联合主键,然后在查询出后的对象上修改主键中的一个字段,以及修改一些其它信息,然后调用,getHibernateTemplate().save(objs);保存时未报错,但数据库里未增加新的记录,原记录信息也未修改过,里面的原因未去深究,然后重新new了一个对象,然后一个一个地把信息取出后保存到新产生的对象,然后再调用getHibernateTemplate().save(objs),结果数据库里新增了数据,记录这一现象有了解详情请多多指教!
把一对象属性拷贝到另一对象去时,常用cole方法,不知道jdk的原码是如何实现的,不知道还有其它什么更好的方法?
public static Object CopyObjectToOtherObject(Object object1, Object object2) {
try {
Field fields2[] = object2.getClass().getDeclaredFields();
Field fields1[] = object1.getClass().getDeclaredFields();
for (int i = 0; i < fields2.length; i++) {
Field field2 = fields2[i];
String fieldName2 = field2.getName();
String setMethodName = "set" + fieldName2.substring(0, 1).toUpperCase() + fieldName2.substring(1);
Method setMethod = object2.getClass().getMethod(setMethodName, new Class[] { field2.getType() });
for (int j = 0; j < fields1.length; j++) {
Field field1 = fields1[j];
if (processNull(field1.getName()).equals(processNull(fieldName2))) {
String getMethodName = "get" + field1.getName().substring(0, 1).toUpperCase()
+ field1.getName().substring(1);
Method getMethod = object1.getClass().getMethod(getMethodName, new Class[] {});
Object returnvalue = getMethod.invoke(object1, new Object[] {});
if(returnvalue==null||returnvalue.equals(""))continue;
String getvalue = returnvalue.toString();
/*
* 根据目标对象中属性(field2)定义的类型,将源对象中属性的值(getvalue)转换为与之(field2)相匹配的类型定义,
* 如 getvalue String -> java.sql.Date
* 避免出现java.lang.IllegalArgumentException: argument type mismatch
*/
if (field2.getType().getName().equals("java.sql.Date")) {
java.sql.Date value = strToSqlDate(getvalue.toString(), "yyyy-MM-dd");
setMethod.invoke(object2, new Object[] { value });
} else if (field2.getType().getName().equals("java.util.Date")) {
java.util.Date value = strToUtilDate(getvalue, "yyyy-MM-dd");
setMethod.invoke(object2, new Object[] { value });
} else if (field2.getType().getName().equals("java.lang.Integer")) {
Integer value = new Integer(getvalue);
setMethod.invoke(object2, new Object[] { value });
} else if (field2.getType().getName().equals("java.lang.Float")) {
Float value = new Float(getvalue);
setMethod.invoke(object2, new Object[] { value });
} else if (field2.getType().getName().equals("java.lang.Boolean")) {
Boolean value = Boolean.valueOf(getvalue);
setMethod.invoke(object2, new Object[] { value });
} else if (field2.getType().getName().equals("java.lang.Long")) {
Long value = Long.valueOf(getvalue);
setMethod.invoke(object2, new Object[] { value });
} else if (field2.getType().getName().equals("java.lang.Short")) {
Short value = Short.valueOf(getvalue);
setMethod.invoke(object2, new Object[] { value });
} else if (field2.getType().getName().equals("java.lang.Byte")) {
Byte value = Byte.valueOf(getvalue);
setMethod.invoke(object2, new Object[] { value });
} else if (field2.getType().getName().equals("java.lang.Double")) {
Double value = Double.valueOf(getvalue);
setMethod.invoke(object2, new Object[] { value });
} else {
setMethod.invoke(object2, new Object[] {getvalue});
}
//setMethod.invoke(object2, new Object[] { value });
break;
}
}
}
} catch (Exception e) {
object2 = null;
} finally {
return object2;
}
}