@Transactional
	public int insert(Object o) throws DataAccessException
	{
		StringBuilder qry = new StringBuilder();
		StringBuilder strFieldColumn = new StringBuilder();
		StringBuilder strValueColumn = new StringBuilder();
		List<Object> val = new ArrayList<Object>();
		qry.append("insert into ");
		Class<?> c = o.getClass();
		final String strTableName = c.getAnnotation(Table.class).name();
		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();
			qry.append(strTableName);
			Annotation[] annotations;
			Field[] fields = c.getDeclaredFields();
			Column clmn;
			boolean blnFlag = false;
			for (Field f : fields)
			{
				f.setAccessible(true);
				annotations = f.getAnnotations();
				for (Annotation a : annotations)
				{
					if (a instanceof Column)
					{
						clmn = (Column)a;
						if (!clmn.name().equalsIgnoreCase(strPkColumnName) || !objPk.autoIncrement())
						{
							if (blnFlag)
							{
								strFieldColumn.append(",");
								strValueColumn.append(",");
							}
							blnFlag = true;
							strFieldColumn.append(clmn.name());
							strValueColumn.append("?");
							val.add(f.get(o));
						}
					}
				}
			}
		}
		catch (Exception e)
		{
			log.debug(e.getMessage(), e);
		}
		
		qry.append("(" + strFieldColumn.toString() + ") values (" + strValueColumn.toString() + ")");
		
		log.debug(qry.toString());
		for (Object o1 : val)
		{
			log.debug(o1);
		}
		log.debug(simpleJdbcTemplate.toString());
		simpleJdbcTemplate.update(qry.toString(), val.toArray());
		return simpleJdbcTemplate.queryForInt("select last_insert_id()");
	}