Matthew, are you still around? Does this feature sounds right to you?:
Have an annotation / mapping that will be called @SearchableCascade. This will allow to cascade operation performed on object (even if they are not root searchables) into its properties. For example:
@Searchable(root=false)
class A {
@SearchableCascde
B b;
}
@Searchable
class B {
@SearchableId
int id;
@SearchableProperty
String text;
}
In this case, Compass will allow for the following operation to be performed:
A a = ...
session.save(a); // can be delete and create as well
Which will result in cascading B. Naturally, this annotation will be allowed to be used with Set/List and array as return values.