I have an app engine application and I want to run a query that sorts the result based on a expression involving two properties. Best way I thought of doing it so far is to
Compute your value in an @OnSave method:
@Entity
public class YourEntity {
@Id Long id;
String foo;
String bar;
@Index String computed;
@OnSave void computeComputed() {
computed = // synthesize from foo and bar
}
}
This is what NDB's ComputedProperty actually does. Java doesn't really have a way of matching that syntax, and I'm not sure NDB's approach is any more elegant. Just leave off the setter method for computed.
You can create an index which involves multiple properties. Something like this:
class X{
@Indexed public String a;
@Indexed public String b;
}
<datastore-index kind="X" ancestor="false">
<property name="a" direction="asc" />
<property name="b" direction="asc" />
</datastore-index>
Read more about it here: https://cloud.google.com/appengine/docs/java/config/indexconfig