关于hibernate的对象保存问题

时间:2022-08-30 14:14:15

        要往数据库添加一条记录一般做法是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;
  }
 }

相关文章