Author: doogie
Date: Thu Oct 7 20:46:22 2010
New Revision: 1005624
URL:
http://svn.apache.org/viewvc?rev=1005624&view=revLog:
Fix updateByCondition, it was converting the condition to sql without
passing any of the values thru the prepared statement; this meant that
toString() was being called, instead of the correct setFoo method.
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java?rev=1005624&r1=1005623&r2=1005624&view=diff==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java Thu Oct 7 20:46:22 2010
@@ -314,26 +314,24 @@ public class GenericDAO {
StringBuilder sql = new StringBuilder("UPDATE ").append(modelEntity.getTableName(datasourceInfo));
sql.append(" SET ");
List<ModelField> fieldList = new LinkedList<ModelField>();
- boolean firstField = true;
- for (String name: fieldsToSet.keySet()) {
+ List<EntityConditionParam> params = new LinkedList<EntityConditionParam>();
+ for (Map.Entry<String, ? extends Object> entry: fieldsToSet.entrySet()) {
+ String name = entry.getKey();
ModelField field = modelEntity.getField(name);
if (field != null) {
- if (!firstField) {
+ if (!params.isEmpty()) {
sql.append(", ");
- } else {
- firstField = false;
}
sql.append(field.getColName()).append(" = ?");
- fieldList.add(field);
+ params.add(new EntityConditionParam(field, entry.getValue()));
}
}
- sql.append(" WHERE ").append(condition.makeWhereString(modelEntity, null, this.datasourceInfo));
+ sql.append(" WHERE ").append(condition.makeWhereString(modelEntity, params, this.datasourceInfo));
try {
sqlP.prepareStatement(sql.toString());
- for (ModelField field: fieldList) {
- Object value = fieldsToSet.get(field.getName());
- SqlJdbcUtil.setValue(sqlP, field, modelEntity.getEntityName(), value, modelFieldTypeReader);
+ for (EntityConditionParam param: params) {
+ SqlJdbcUtil.setValue(sqlP, param.getModelField(), modelEntity.getEntityName(), param.getFieldValue(), modelFieldTypeReader);
}
return sqlP.executeUpdate();