killbill-memoizeit

Details

diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
index 2efe1c5..3699d88 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
@@ -100,22 +100,42 @@ public class SubscriptionData extends CustomizableEntityBase implements Subscrip
 
     @Override
     public void setFieldValue(String fieldName, String fieldValue) {
+        setFieldValueInternal(fieldName, fieldValue, true);
+    }
+
+    public void setFieldValueInternal(String fieldName, String fieldValue, boolean commit) {
         super.setFieldValue(fieldName, fieldValue);
-        apiService.commitCustomFields(this);
+        if (commit) {
+            apiService.commitCustomFields(this);
+        }
     }
 
+
     @Override
     public void addFields(List<CustomField> fields) {
+        addFieldsInternal(fields, true);
+    }
+
+    public void addFieldsInternal(List<CustomField> fields, boolean commit) {
         super.addFields(fields);
-        apiService.commitCustomFields(this);
+        if (commit) {
+            apiService.commitCustomFields(this);
+        }
     }
 
     @Override
     public void clearFields() {
+        clearFieldsInternal(true);
+    }
+
+    public void clearFieldsInternal(boolean commit) {
         super.clearFields();
-        apiService.commitCustomFields(this);
+        if (commit) {
+            apiService.commitCustomFields(this);
+        }
     }
 
+
     @Override
     public UUID getBundleId() {
         return bundleId;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
index e34d48c..c0e4316 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
@@ -511,7 +511,7 @@ public class EntitlementSqlDao implements EntitlementDao {
             default:
                 break;
             }
-            loadCustomFields(reloaded);
+            loadCustomFields((SubscriptionData) reloaded);
             result.add(reloaded);
         }
         return result;
@@ -618,13 +618,12 @@ public class EntitlementSqlDao implements EntitlementDao {
         });
     }
 
-
-    private void loadCustomFields(final Subscription subscription) {
+    private void loadCustomFields(final SubscriptionData subscription) {
         FieldStoreDao fieldStoreDao = subscriptionsDao.become(FieldStoreDao.class);
         List<CustomField> fields = fieldStoreDao.load(subscription.getId().toString(), subscription.getObjectName());
-        subscription.clearFields();
+        subscription.clearFieldsInternal(false);
         if (fields != null) {
-            subscription.addFields(fields);
+            subscription.addFieldsInternal(fields, false);
         }
     }
 }