diff -r ff0743b08ddb src/org/openbravo/event/CharacteristicValueEventHandler.java
--- a/src/org/openbravo/event/CharacteristicValueEventHandler.java	Thu Oct 16 10:10:59 2014 +0200
+++ b/src/org/openbravo/event/CharacteristicValueEventHandler.java	Thu Oct 16 13:10:57 2014 +0200
@@ -24,7 +24,8 @@
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
-import org.hibernate.criterion.Restrictions;
+import org.hibernate.Query;
+import org.hibernate.Session;
 import org.openbravo.base.model.Entity;
 import org.openbravo.base.model.ModelProvider;
 import org.openbravo.base.model.Property;
@@ -35,12 +36,9 @@
 import org.openbravo.client.kernel.event.TransactionBeginEvent;
 import org.openbravo.client.kernel.event.TransactionCompletedEvent;
 import org.openbravo.dal.core.OBContext;
-import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.materialmgmt.VariantChDescUpdateProcess;
 import org.openbravo.model.common.plm.CharacteristicValue;
-import org.openbravo.model.common.plm.ProductCharacteristic;
-import org.openbravo.model.common.plm.ProductCharacteristicConf;
 import org.openbravo.scheduling.OBScheduler;
 import org.openbravo.scheduling.ProcessBundle;
 import org.openbravo.service.db.DalConnectionProvider;
@@ -57,11 +55,13 @@
   }
 
   @SuppressWarnings("unused")
-  public void onTransactionBegin(@Observes TransactionBeginEvent event) {
+  public void onTransactionBegin(@Observes
+  TransactionBeginEvent event) {
     chvalueUpdated.set(null);
   }
 
-  public void onUpdate(@Observes EntityUpdateEvent event) {
+  public void onUpdate(@Observes
+  EntityUpdateEvent event) {
     if (!isValidEvent(event)) {
       return;
     }
@@ -73,32 +73,30 @@
         CharacteristicValue.ENTITY_NAME);
     final Property codeProperty = prodchValue.getProperty(CharacteristicValue.PROPERTY_CODE);
     if (event.getCurrentState(codeProperty) != event.getPreviousState(codeProperty)) {
-      OBCriteria<ProductCharacteristic> productCharateristic = OBDal.getInstance().createCriteria(
-          ProductCharacteristic.class);
-      productCharateristic.add(Restrictions
-          .isNull(ProductCharacteristic.PROPERTY_CHARACTERISTICSUBSET));
-      if (productCharateristic.count() > 0) {
-        for (ProductCharacteristic productch : productCharateristic.list()) {
-          OBCriteria<ProductCharacteristicConf> productCharateristicsConf = OBDal.getInstance()
-              .createCriteria(ProductCharacteristicConf.class);
-          productCharateristicsConf.add(Restrictions.eq(
-              ProductCharacteristicConf.PROPERTY_CHARACTERISTICOFPRODUCT, productch));
-          productCharateristicsConf.add(Restrictions.eq(
-              ProductCharacteristicConf.PROPERTY_CHARACTERISTICVALUE, chv));
-          if (productCharateristicsConf.count() > 0) {
-            for (ProductCharacteristicConf conf : productCharateristicsConf.list()) {
-              if (chv.getCode() != conf.getCode()) {
-                conf.setCode(chv.getCode());
-                OBDal.getInstance().save(conf);
-              }
-            }
-          }
-        }
+      StringBuffer where = new StringBuffer();
+      where
+          .append(" update ProductCharacteristicConf as pcc set code = :code, updated = now(), updatedBy = :user");
+      where
+          .append(" where exists (select 1 from  ProductCharacteristic as pc where pcc.characteristicOfProduct = pc ");
+      where
+          .append(" and pc.characteristicSubset is null and pcc.characteristicValue = :characteristicValue and pcc.code <> :code)");
+      try {
+        final Session session = OBDal.getInstance().getSession();
+        final Query charConfQuery = session.createQuery(where.toString());
+        String code = chv.getCode();
+        charConfQuery.setParameter("characteristicValue", chv);
+        charConfQuery.setParameter("code", code);
+        charConfQuery.setParameter("user", OBContext.getOBContext().getUser());
+        charConfQuery.executeUpdate();
+      } catch (Exception e) {
+        logger.error("Error on update event. Product Characteristing Config could not be updated",
+            e);
       }
     }
   }
 
-  public void onTransactionCompleted(@Observes TransactionCompletedEvent event) {
+  public void onTransactionCompleted(@Observes
+  TransactionCompletedEvent event) {
     String strChValueId = chvalueUpdated.get();
     chvalueUpdated.set(null);
     if (StringUtils.isBlank(strChValueId) || event.getTransaction().wasRolledBack()) {
