Is it possible to have a computed property on Goog

2020-03-08 06:03发布

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 create a computed/calculated property that stores the result of that expression. Although I saw that GAE in Python offers a ComputedProperty, which seems to be exactly what I'm looking for, I couldn't find an equivalent in Java.

I'm currently using Objectify too, if that helps.

Any ideas?

2条回答
叼着烟拽天下
2楼-- · 2020-03-08 06:47

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.

查看更多
何必那么认真
3楼-- · 2020-03-08 06:57

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

查看更多
登录 后发表回答