public static<T> long delete(Class<T> clazz, Restriction<T> r, Object o){
		if(r==null && o==null)
			throw new NullPointerException("All the arguements is null, i cann't decide how to delete ! ");
		ClassToTable ctt = MapContainer.getCCT(clazz);
		if(r == null)
			r = new Restriction<T>(clazz);
		if(o != null){
			for(Property p : ctt.getProps()){
				Object value = p.getter(o);
				if(value != null)
					r.equal(p.getName(), value);
			}
		}
		
		DeleteOperation delete = new DeleteOperation();
		delete.setTableName(ctt.getTableName());
		delete.setRestriction(r);
		delete.setConn(ConnectionContainer.getConnection(ctt.getDataSource()));
		try {
			return getExecutor(delete.getConn()).delete(delete);
		} catch (SQLException e) {
			throw new RuntimeException("Exception occurs during JDBC DELETE ! ", e);
		} finally {
            try {
                delete.getConn().close();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }
    }