@Transactional
	public int update(Object o) throws DataAccessException
	{
		StringBuilder qry = new StringBuilder();
		StringBuilder strFieldColumn = new StringBuilder();
		StringBuilder strWherePkClause = new StringBuilder();
		List<Object> val = new ArrayList<Object>();
		qry.append("update ");
		Class<?> c = o.getClass();
		final String strTableName = c.getAnnotation(Table.class).name();
		qry.append(strTableName);
		final PrimaryKey objPk = getPrimaryKey(c);
		final String strPrimaryKeyName = objPk.key();
		Field objPkField = null;
		try
		{
			objPkField = c.getDeclaredField(strPrimaryKeyName);
			final String strPkColumnName = objPkField.getAnnotation(Column.class).name();
			Annotation[] annotations;
			Field[] fields = c.getDeclaredFields();
			Column clmn;
			Object pk = null;
			boolean blnFlag = false;
			boolean blnPkFlag = false;
			for (Field f : fields)
			{
				f.setAccessible(true);
				annotations = f.getAnnotations();
				for (Annotation a : annotations)
				{
					if (a instanceof Column)
					{
						clmn = (Column)a;
						if (blnFlag)
						{
							strFieldColumn.append(",");
						}
						else
						{
							strFieldColumn.append(" set ");
						}
						blnFlag = true;
						if (clmn.name().equalsIgnoreCase(strPkColumnName))
						{
							strWherePkClause.append(clmn.name() + "=?");
							pk = f.get(o);
							blnPkFlag = true;
						}
						strFieldColumn.append(clmn.name() + "=?");
						val.add(f.get(o));
					}
				}
			}
			if (blnPkFlag)
			{
				qry.append(strFieldColumn.toString() + " Where " + strWherePkClause.toString());
				val.add(pk);
			}
			else
			{
				qry.append(strFieldColumn.toString());
				this.setUniqueKeyData(qry, val, o);
			}
		}
		catch (NoSuchFieldException | IllegalAccessException e)
		{
			log.debug(e.getMessage(), e);
		}
		log.debug(qry.toString());
		return simpleJdbcTemplate.update(qry.toString(), val.toArray());
	}