diff --git a/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java b/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java index 5fe365346..4f03e8507 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java +++ b/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java @@ -835,6 +835,13 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty { return scalarType.format(value); } + /** + * Return the value from String format into Object value. + */ + public Object parse(String value) { + return scalarType.parse(value); + } + /** * Read the value for this property from L2 cache entry and set it to the bean. *

diff --git a/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java b/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java index f1a93dfbb..599a8a97e 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java +++ b/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java @@ -263,11 +263,9 @@ public final class IdBinderEmbedded implements IdBinder { public Object convertIdFromJson(Object value) { Map map = (Map) value; - EntityBean idValue = idDesc.createEntityBean(); for (BeanProperty prop : props) { - Object val = map.get(prop.getName()); - prop.setValue(idValue, val); + prop.setValue(idValue, map.get(prop.getName())); } return idValue; } @@ -465,7 +463,14 @@ public final class IdBinderEmbedded implements IdBinder { @Override public Object convertId(Object idValue) { - // can not cast/convert if it is embedded + if (idValue instanceof String) { + final EntityBean embId = idDesc.createEntityBean(); + final String[] rawVals = ((String)idValue).split("\\|"); + for (int i = 0; i < props.length; i++) { + props[i].setValue(embId, props[i].parse(rawVals[i])); + } + return embId; + } return idValue; }