diff options
-rw-r--r-- | src/main/java/com/amazon/carbonado/layout/LayoutFactory.java | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/main/java/com/amazon/carbonado/layout/LayoutFactory.java b/src/main/java/com/amazon/carbonado/layout/LayoutFactory.java index c52d0b8..d03b80c 100644 --- a/src/main/java/com/amazon/carbonado/layout/LayoutFactory.java +++ b/src/main/java/com/amazon/carbonado/layout/LayoutFactory.java @@ -74,6 +74,10 @@ public class LayoutFactory implements LayoutCapability { private SoftValuedCache<Class<? extends Storable>, Layout> mReconstructed;
+ // Added this to allow consumers of the the main Carbonado to deal which
+ // changes to how LayoutFactories are reconstructed from streams.
+ public static final int VERSION = 2;
+
/**
* @throws com.amazon.carbonado.SupportException if underlying repository
* does not support the storables for persisting storable layouts
@@ -371,9 +375,17 @@ public class LayoutFactory implements LayoutCapability { } catch (UniqueConstraintException e) {
StoredLayout existing = mLayoutStorage.prepare();
storedLayout.copyPrimaryKeyProperties(existing);
- if (!existing.tryLoad() || !existing.equalProperties(storedLayout)) {
+ if (!existing.tryLoad()) {
+ throw e;
+ }
+ // Only check subset of primary and alternate keys. The check
+ // of layout properties is more important.
+ if (!(existing.getLayoutID() == storedLayout.getLayoutID() &&
+ existing.getStorableTypeName().equals(storedLayout.getStorableTypeName())))
+ {
throw e;
}
+ storedLayout = existing;
}
int op;
|