|  | @@ -64,6 +64,9 @@ public abstract class DatabaseTable<T extends Persistable> {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	public T refresh(long id) {
 | 
	
		
			
				|  |  | +		if (!DatabaseProperties.getBool("cache")) {
 | 
	
		
			
				|  |  | +			throw new IllegalArgumentException("Cache is not enabled, can't refresh");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  		if (!cacheMap.containsKey(id)) {
 | 
	
		
			
				|  |  |  			throw new IllegalArgumentException("Entity is not load, can't refresh");
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -79,46 +82,34 @@ public abstract class DatabaseTable<T extends Persistable> {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	public T save(T obj) {
 | 
	
		
			
				|  |  | -		if (cacheMap.containsKey(obj.getId())) {
 | 
	
		
			
				|  |  | -			update(obj);
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			insert(obj);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		return cache(obj);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | -	public void delete(long id) {
 | 
	
		
			
				|  |  | -		DbTable dbTable = getDbTableAnnotation();
 | 
	
		
			
				|  |  | -		// Cherche l'id
 | 
	
		
			
				|  |  | -		String idField = null;
 | 
	
		
			
				|  |  | -		for(Field field : dbTable.entity().getFields()) {
 | 
	
		
			
				|  |  | -			if(!field.isAnnotationPresent(DbId.class)) {
 | 
	
		
			
				|  |  | -				continue;
 | 
	
		
			
				|  |  | +		// Si le cache est activé on se base dessus
 | 
	
		
			
				|  |  | +		if (DatabaseProperties.getBool("cache")) {
 | 
	
		
			
				|  |  | +			if (cacheMap.containsKey(obj.getId())) {
 | 
	
		
			
				|  |  | +				update(obj);
 | 
	
		
			
				|  |  | +			} else {
 | 
	
		
			
				|  |  | +				insert(obj);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			// Lecture du nom de l'id dans la base
 | 
	
		
			
				|  |  | -			if(field.isAnnotationPresent(DbField.class)) {
 | 
	
		
			
				|  |  | -				idField = field.getAnnotation(DbField.class).value();
 | 
	
		
			
				|  |  | +		} 
 | 
	
		
			
				|  |  | +		// Sinon on regarde en base
 | 
	
		
			
				|  |  | +		else {
 | 
	
		
			
				|  |  | +			if (findById(obj.getId()).isPresent()) {
 | 
	
		
			
				|  |  | +				update(obj);
 | 
	
		
			
				|  |  |  			} else {
 | 
	
		
			
				|  |  | -				throw new IllegalStateException("Unable to find DbField annotation on id");
 | 
	
		
			
				|  |  | +				insert(obj);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		if (idField == null) {
 | 
	
		
			
				|  |  | -			throw new IllegalStateException("Unable to find find DbField annotation");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		// Requete SQL
 | 
	
		
			
				|  |  | -		String sql = "Delete From " + dbTable.name() + " Where " + idField + " = ?";
 | 
	
		
			
				|  |  | -		List<Object> params = new ArrayList<>();
 | 
	
		
			
				|  |  | -		params.add(id);
 | 
	
		
			
				|  |  | -		// Execution requete
 | 
	
		
			
				|  |  | -		if (!Database.execute(sql, params)) {
 | 
	
		
			
				|  |  | -			throw new IllegalStateException("Unable to delete data");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +		return cache(obj);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	public void del(long id) {
 | 
	
		
			
				|  |  | +		// Suppr de la base
 | 
	
		
			
				|  |  | +		delete(id);
 | 
	
		
			
				|  |  |  		// Retire du cache
 | 
	
		
			
				|  |  |  		remove(id);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | -	public void delete(T obj) {
 | 
	
		
			
				|  |  | -		delete(obj.getId());
 | 
	
		
			
				|  |  | +	public void del(T obj) {
 | 
	
		
			
				|  |  | +		del(obj.getId());
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	private T cache(T obj) {
 | 
	
	
		
			
				|  | @@ -152,27 +143,15 @@ public abstract class DatabaseTable<T extends Persistable> {
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	private Optional<T> getFromDbById(long id) {
 | 
	
		
			
				|  |  |  		DbTable dbTable = getDbTableAnnotation();
 | 
	
		
			
				|  |  | -		// Cherche l'id
 | 
	
		
			
				|  |  | -		String idField = null;
 | 
	
		
			
				|  |  | -		for(Field field : dbTable.entity().getFields()) {
 | 
	
		
			
				|  |  | -			if(!field.isAnnotationPresent(DbId.class)) {
 | 
	
		
			
				|  |  | -				continue;
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			// Lecture du nom de l'id dans la base
 | 
	
		
			
				|  |  | -			if(field.isAnnotationPresent(DbField.class)) {
 | 
	
		
			
				|  |  | -				idField = field.getAnnotation(DbField.class).value();
 | 
	
		
			
				|  |  | -			} else {
 | 
	
		
			
				|  |  | -				throw new IllegalStateException("Unable to find DbField annotation on id");
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +		// Recupère l'id
 | 
	
		
			
				|  |  | +		Field idField = DatabaseUtils.getIdField(dbTable.entity());
 | 
	
		
			
				|  |  |  		if (idField == null) {
 | 
	
		
			
				|  |  | -			throw new IllegalStateException("Unable to find find DbField annotation");
 | 
	
		
			
				|  |  | +			throw new IllegalStateException("Unable to find id field");
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		// Requete sql
 | 
	
		
			
				|  |  | -		String sql = "Select * From " + dbTable.name() + " Where " + idField + " = ?";
 | 
	
		
			
				|  |  | -		List<Object> params = new ArrayList<>();
 | 
	
		
			
				|  |  | -		params.add(id);
 | 
	
		
			
				|  |  | -		Optional<T> result = Database.query(sql, params, DatabaseMapper.objectMapper(dbTable));
 | 
	
		
			
				|  |  | +		SQLQueryBuilder sql = SQLQueryBuilder.selectQuery(dbTable.name());
 | 
	
		
			
				|  |  | +		sql.add(DatabaseUtils.getDbField(idField), id);
 | 
	
		
			
				|  |  | +		Optional<T> result = Database.query(sql.toString(), sql.getParams(), DatabaseMapper.objectMapper(dbTable));
 | 
	
		
			
				|  |  |  		// Return
 | 
	
		
			
				|  |  |  		return result;
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -180,10 +159,9 @@ public abstract class DatabaseTable<T extends Persistable> {
 | 
	
		
			
				|  |  |  	private List<T> getFromDbByField(String fieldname, Object value) {
 | 
	
		
			
				|  |  |  		DbTable dbTable = getDbTableAnnotation();
 | 
	
		
			
				|  |  |  		// Requete sql
 | 
	
		
			
				|  |  | -		String sql = "Select * From " + dbTable.name() + " Where " + fieldname + " = ?";
 | 
	
		
			
				|  |  | -		List<Object> params = new ArrayList<>();
 | 
	
		
			
				|  |  | -		params.add(value);
 | 
	
		
			
				|  |  | -		Optional<List<T>> result = Database.query(sql, params, DatabaseMapper.listMapper(dbTable));
 | 
	
		
			
				|  |  | +		SQLQueryBuilder sql = SQLQueryBuilder.selectQuery(dbTable.name());
 | 
	
		
			
				|  |  | +		sql.add(fieldname, value);
 | 
	
		
			
				|  |  | +		Optional<List<T>> result = Database.query(sql.toString(), sql.getParams(), DatabaseMapper.listMapper(dbTable));
 | 
	
		
			
				|  |  |  		// Return
 | 
	
		
			
				|  |  |  		if(result.isPresent()) {
 | 
	
		
			
				|  |  |  			return result.get();
 | 
	
	
		
			
				|  | @@ -194,9 +172,8 @@ public abstract class DatabaseTable<T extends Persistable> {
 | 
	
		
			
				|  |  |  	private List<T> getWhereFromDb(List<String> where, List<Object> params) {
 | 
	
		
			
				|  |  |  		DbTable dbTable = getDbTableAnnotation();
 | 
	
		
			
				|  |  |  		// Requete sql
 | 
	
		
			
				|  |  | -		StringBuilder sql = new StringBuilder();
 | 
	
		
			
				|  |  | -		sql.append("Select * From " + dbTable.name() + "Where 1=1");
 | 
	
		
			
				|  |  | -		where.forEach(elt -> sql.append(" And " + elt + " = ?"));
 | 
	
		
			
				|  |  | +		SQLQueryBuilder sql = SQLQueryBuilder.selectQuery(dbTable.name());
 | 
	
		
			
				|  |  | +		where.forEach(elt -> sql.add(elt));
 | 
	
		
			
				|  |  |  		// Execution requete
 | 
	
		
			
				|  |  |  		Optional<List<T>> result = Database.query(sql.toString(), params, DatabaseMapper.listMapper(dbTable));
 | 
	
		
			
				|  |  |  		// Return
 | 
	
	
		
			
				|  | @@ -209,8 +186,8 @@ public abstract class DatabaseTable<T extends Persistable> {
 | 
	
		
			
				|  |  |  	private List<T> getAllFromDb() {
 | 
	
		
			
				|  |  |  		DbTable dbTable = getDbTableAnnotation();
 | 
	
		
			
				|  |  |  		// Requete sql
 | 
	
		
			
				|  |  | -		String sql = "Select * From " + dbTable.name();
 | 
	
		
			
				|  |  | -		Optional<List<T>> result = Database.query(sql, DatabaseMapper.listMapper(dbTable));
 | 
	
		
			
				|  |  | +		SQLQueryBuilder sql = SQLQueryBuilder.selectQuery(dbTable.name());
 | 
	
		
			
				|  |  | +		Optional<List<T>> result = Database.query(sql.toString(), DatabaseMapper.listMapper(dbTable));
 | 
	
		
			
				|  |  |  		// Return
 | 
	
		
			
				|  |  |  		if(result.isPresent()) {
 | 
	
		
			
				|  |  |  			return result.get();
 | 
	
	
		
			
				|  | @@ -220,67 +197,39 @@ public abstract class DatabaseTable<T extends Persistable> {
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	private void insert(T obj) {
 | 
	
		
			
				|  |  |  		DbTable dbTable = getDbTableAnnotation();
 | 
	
		
			
				|  |  | -		// Requete SQL
 | 
	
		
			
				|  |  | -		StringBuilder sql = new StringBuilder();
 | 
	
		
			
				|  |  | -		StringBuilder values = new StringBuilder();
 | 
	
		
			
				|  |  | -		String dbIdName = null; // Nom de l'id en base
 | 
	
		
			
				|  |  | -		String attrIdName = null; // Nom de l'id dans la class
 | 
	
		
			
				|  |  | -		List<Object> params = new ArrayList<>();
 | 
	
		
			
				|  |  | -		sql.append("Insert Into " + dbTable.name() + "(");
 | 
	
		
			
				|  |  | -		boolean first = true;
 | 
	
		
			
				|  |  | +		// Récupération du champ id
 | 
	
		
			
				|  |  | +		Field id = DatabaseUtils.getIdField(obj.getClass());
 | 
	
		
			
				|  |  | +		if (id == null) {
 | 
	
		
			
				|  |  | +			throw new IllegalStateException("Unable to find id field");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  		try {
 | 
	
		
			
				|  |  | +			// Création requete SQL
 | 
	
		
			
				|  |  | +			SQLQueryBuilder sql = SQLQueryBuilder.insertQuery(dbTable.name());
 | 
	
		
			
				|  |  |  			for(Field field : obj.getClass().getFields()) {
 | 
	
		
			
				|  |  | -				if (!field.isAnnotationPresent(DbField.class)) {
 | 
	
		
			
				|  |  | -					continue;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				// Cherche l'id
 | 
	
		
			
				|  |  | -				if (dbIdName == null && field.isAnnotationPresent(DbId.class)) {
 | 
	
		
			
				|  |  | -					dbIdName = field.getAnnotation(DbField.class).value();
 | 
	
		
			
				|  |  | -					attrIdName = field.getName();
 | 
	
		
			
				|  |  | +				String dbField;
 | 
	
		
			
				|  |  | +				if ((dbField = DatabaseUtils.getDbField(field)) == null || DatabaseUtils.isDbId(field)) {
 | 
	
		
			
				|  |  |  					continue;
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -				// Recupere la valeur des autres attributs
 | 
	
		
			
				|  |  | -				if (!first) {
 | 
	
		
			
				|  |  | -					sql.append(",");
 | 
	
		
			
				|  |  | -					values.append(",");
 | 
	
		
			
				|  |  | +				Object value = field.get(obj);
 | 
	
		
			
				|  |  | +				// Si c'est un lien vers une autre entité
 | 
	
		
			
				|  |  | +				if (value != null && DatabaseUtils.isDbLink(field)) {
 | 
	
		
			
				|  |  | +					// Recup class gestion de la table pour sauvegarder l'objet avant de l'ajouter à la requete
 | 
	
		
			
				|  |  | +					Persistable link = DatabaseUtils.getDbLinkObject(field, obj);
 | 
	
		
			
				|  |  | +					DatabaseTable dt = DatabaseUtils.getDatabaseTable(field);
 | 
	
		
			
				|  |  | +					dt.save(link);
 | 
	
		
			
				|  |  | +					value = link.getId();
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -				sql.append(field.getAnnotation(DbField.class).value());
 | 
	
		
			
				|  |  | -				values.append("?");
 | 
	
		
			
				|  |  | -				// Si il y a un lien avec une autre entité
 | 
	
		
			
				|  |  | -				if(field.isAnnotationPresent(DbLink.class)) {
 | 
	
		
			
				|  |  | -					DatabaseUtils.checkIfPersistable(field);
 | 
	
		
			
				|  |  | -					if(field.get(obj) == null) {
 | 
	
		
			
				|  |  | -						params.add(null);
 | 
	
		
			
				|  |  | -					} else {
 | 
	
		
			
				|  |  | -						Persistable persistable = (Persistable) field.get(obj);
 | 
	
		
			
				|  |  | -						// TODO Sauvegarder l'autre objet avant
 | 
	
		
			
				|  |  | -						params.add(persistable.getId());
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				// Sinon ajoute simplement le parametre
 | 
	
		
			
				|  |  | -				else {
 | 
	
		
			
				|  |  | -					params.add(field.get(obj));
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				first = false;
 | 
	
		
			
				|  |  | +				sql.add(dbField, value);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -		} catch (IllegalArgumentException | IllegalAccessException e) {
 | 
	
		
			
				|  |  | -			throw new IllegalStateException("Unable to access to the attribute", e);
 | 
	
		
			
				|  |  | -		}	
 | 
	
		
			
				|  |  | -		sql.append(") Values (");
 | 
	
		
			
				|  |  | -		sql.append(values);
 | 
	
		
			
				|  |  | -		sql.append(")");
 | 
	
		
			
				|  |  | -		// Verif que l'on a bien le nom de l'id
 | 
	
		
			
				|  |  | -		if(dbIdName == null) {
 | 
	
		
			
				|  |  | -			throw new IllegalStateException("Unable to find id field");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		// Execution de la requete
 | 
	
		
			
				|  |  | -		Map<String, Object> newId = Database.insert(sql.toString(), params, new String[]{dbIdName});
 | 
	
		
			
				|  |  | -		if (newId.isEmpty()) {
 | 
	
		
			
				|  |  | -			throw new IllegalStateException("Unable to save data");
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		// Application nouvelle id
 | 
	
		
			
				|  |  | -		Object val = newId.get(dbIdName);
 | 
	
		
			
				|  |  | -		try {
 | 
	
		
			
				|  |  | +			// Execution de la requete
 | 
	
		
			
				|  |  | +			String dbIdName = DatabaseUtils.getDbField(id);
 | 
	
		
			
				|  |  | +			String attrIdName = id.getName();
 | 
	
		
			
				|  |  | +			Map<String, Object> newId = Database.insert(sql.toString(), sql.getParams(), new String[]{dbIdName});
 | 
	
		
			
				|  |  | +			if (newId.isEmpty()) {
 | 
	
		
			
				|  |  | +				throw new IllegalStateException("Unable to save data");
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			// Récupération de l'id
 | 
	
		
			
				|  |  | +			Object val = newId.get(dbIdName);
 | 
	
		
			
				|  |  |  			if (val instanceof BigDecimal) {
 | 
	
		
			
				|  |  |  				BigDecimal b = (BigDecimal) val;
 | 
	
		
			
				|  |  |  				obj.getClass().getField(attrIdName).set(obj, b.longValue());
 | 
	
	
		
			
				|  | @@ -288,59 +237,60 @@ public abstract class DatabaseTable<T extends Persistable> {
 | 
	
		
			
				|  |  |  				obj.getClass().getField(attrIdName).set(obj, val);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) {
 | 
	
		
			
				|  |  | -			throw new IllegalStateException("Unable to set id", e);
 | 
	
		
			
				|  |  | +			throw new IllegalStateException("Unable to save data", e);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	private void update(T obj) {
 | 
	
		
			
				|  |  |  		DbTable dbTable = getDbTableAnnotation();
 | 
	
		
			
				|  |  | -		// Requete SQL
 | 
	
		
			
				|  |  | -		StringBuilder sql = new StringBuilder();
 | 
	
		
			
				|  |  | -		StringBuilder where = new StringBuilder();
 | 
	
		
			
				|  |  | -		List<Object> params = new ArrayList<>();
 | 
	
		
			
				|  |  | -		sql.append("Update " + dbTable.name() + " Set ");
 | 
	
		
			
				|  |  | -		where.append(" Where ");
 | 
	
		
			
				|  |  | -		boolean first = true;
 | 
	
		
			
				|  |  | -		for (Field field : obj.getClass().getFields()) {
 | 
	
		
			
				|  |  | -			try {
 | 
	
		
			
				|  |  | -				if (!field.isAnnotationPresent(DbField.class)) {
 | 
	
		
			
				|  |  | -					continue;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				// Si c'est l'id
 | 
	
		
			
				|  |  | -				if (field.isAnnotationPresent(DbId.class)) {
 | 
	
		
			
				|  |  | -					where.append(field.getAnnotation(DbField.class).value() + " = ?");
 | 
	
		
			
				|  |  | +		// Récupération du champ id
 | 
	
		
			
				|  |  | +		Field id = DatabaseUtils.getIdField(obj.getClass());
 | 
	
		
			
				|  |  | +		if (id == null) {
 | 
	
		
			
				|  |  | +			throw new IllegalStateException("Unable to find id field");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		try {
 | 
	
		
			
				|  |  | +			// Création requete SQL
 | 
	
		
			
				|  |  | +			SQLQueryBuilder sql = SQLQueryBuilder.updateQuery(dbTable.name());
 | 
	
		
			
				|  |  | +			for(Field field : obj.getClass().getFields()) {
 | 
	
		
			
				|  |  | +				String dbField;
 | 
	
		
			
				|  |  | +				if ((dbField = DatabaseUtils.getDbField(field)) == null || DatabaseUtils.isDbId(field)) {
 | 
	
		
			
				|  |  |  					continue;
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -				// Sinon ajoute dans le set
 | 
	
		
			
				|  |  | -				if (!first) {
 | 
	
		
			
				|  |  | -					sql.append(",");
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				sql.append(field.getAnnotation(DbField.class).value() + " = ?");
 | 
	
		
			
				|  |  | -				// Si il y a un lien avec une autre entité
 | 
	
		
			
				|  |  | -				if(field.isAnnotationPresent(DbLink.class)) {
 | 
	
		
			
				|  |  | -					DatabaseUtils.checkIfPersistable(field);
 | 
	
		
			
				|  |  | -					if(field.get(obj) == null) {
 | 
	
		
			
				|  |  | -						params.add(null);
 | 
	
		
			
				|  |  | -					} else {
 | 
	
		
			
				|  |  | -						Persistable persistable = (Persistable) field.get(obj);
 | 
	
		
			
				|  |  | -						// TODO Sauvegarder l'autre objet avant
 | 
	
		
			
				|  |  | -						params.add(persistable.getId());
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | +				Object value = field.get(obj);
 | 
	
		
			
				|  |  | +				// Si c'est un lien vers une autre entité
 | 
	
		
			
				|  |  | +				if (value != null && DatabaseUtils.isDbLink(field)) {
 | 
	
		
			
				|  |  | +					// Recup class gestion de la table pour sauvegarder l'objet avant de l'ajouter à la requete
 | 
	
		
			
				|  |  | +					Persistable link = DatabaseUtils.getDbLinkObject(field, obj);
 | 
	
		
			
				|  |  | +					DatabaseTable dt = DatabaseUtils.getDatabaseTable(field);
 | 
	
		
			
				|  |  | +					dt.save(link);
 | 
	
		
			
				|  |  | +					value = link.getId();
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -				// Sinon ajoute simplement le parametre
 | 
	
		
			
				|  |  | -				else {
 | 
	
		
			
				|  |  | -					params.add(field.get(obj));
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				first = false;
 | 
	
		
			
				|  |  | -			} catch (IllegalArgumentException | IllegalAccessException e) {
 | 
	
		
			
				|  |  | -				throw new IllegalStateException("Unable to access to the attribute", e);
 | 
	
		
			
				|  |  | +				sql.add(dbField, value);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			// Ajoute l'id
 | 
	
		
			
				|  |  | +			sql.addId(DatabaseUtils.getDbField(id), id.get(obj));
 | 
	
		
			
				|  |  | +			// Execution de la requete
 | 
	
		
			
				|  |  | +			if(!Database.execute(sql.toString(), sql.getParams())) {
 | 
	
		
			
				|  |  | +				throw new IllegalStateException("Unable to save data");
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +		} catch (IllegalArgumentException | IllegalAccessException | SecurityException e) {
 | 
	
		
			
				|  |  | +			throw new IllegalStateException("Unable to save data", e);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		sql.append(where);
 | 
	
		
			
				|  |  | -		params.add(obj.getId());
 | 
	
		
			
				|  |  | -		// Execution requete
 | 
	
		
			
				|  |  | -		if(!Database.execute(sql.toString(), params)) {
 | 
	
		
			
				|  |  | -			throw new IllegalStateException("Unable to save data");
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	private void delete(long id) {
 | 
	
		
			
				|  |  | +		DbTable dbTable = getDbTableAnnotation();
 | 
	
		
			
				|  |  | +		// Récupération du champ id
 | 
	
		
			
				|  |  | +		Field idField = DatabaseUtils.getIdField(dbTable.entity());
 | 
	
		
			
				|  |  | +		if (idField == null) {
 | 
	
		
			
				|  |  | +			throw new IllegalStateException("Unable to find id field");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// Création requete SQL
 | 
	
		
			
				|  |  | +		SQLQueryBuilder sql = SQLQueryBuilder.deleteQuery(dbTable.name());
 | 
	
		
			
				|  |  | +		sql.addId(DatabaseUtils.getDbField(idField), id);
 | 
	
		
			
				|  |  | +		// Execution de la requete
 | 
	
		
			
				|  |  | +		if (!Database.execute(sql.toString(), sql.getParams())) {
 | 
	
		
			
				|  |  | +			throw new IllegalStateException("Unable to delete data");
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 |