protected void createEmbeddedAttributeProperty(
      PersistentDescriptor descriptor,
      EmbeddedAttribute embeddedAttribute,
      ObjAttribute attribute) {

    Class<?> embeddableClass = embeddedAttribute.getJavaClass();

    String propertyPath = attribute.getName();
    int lastDot = propertyPath.lastIndexOf('.');
    if (lastDot <= 0 || lastDot == propertyPath.length() - 1) {
      throw new IllegalArgumentException("Invalid embeddable path: " + propertyPath);
    }

    String embeddableName = propertyPath.substring(lastDot + 1);

    EmbeddableDescriptor embeddableDescriptor = createEmbeddableDescriptor(embeddedAttribute);

    Accessor embeddedAccessor =
        createAccessor(descriptor, embeddedAttribute.getName(), embeddableClass);
    Accessor embeddedableAccessor =
        createEmbeddableAccessor(embeddableDescriptor, embeddableName, attribute.getJavaClass());

    Accessor accessor =
        new EmbeddedFieldAccessor(embeddableDescriptor, embeddedAccessor, embeddedableAccessor);
    descriptor.addDeclaredProperty(new SimpleAttributeProperty(descriptor, accessor, attribute));
  }