实体子类对象化查询



我正在使用带有Objectify 4.0b3的Google App Engine(Java),并希望在子类SportFacilityUserDefinedFacility中拥有一个超类设施。我希望能够按 id 查询设施,从而从所有子类中获取设施,我还希望能够对每个子类执行相同的操作。

@Entity
public class Facility {
    @Id
    protected Long id;
    @Index
    protected String name;
    @Index
    protected double x_coordinate;
    @Index
    protected double y_coordinate;
    @Index
    protected String address;
    protected Facility(){}
    public Facility(String name, double x_coordinate, double y_coordinate, String address) {
        this.name = name;
        this.x_coordinate = x_coordinate;
        this.y_coordinate = y_coordinate;
        this.address = address;
}
@EntitySubclass(index=true)
public class SportFacility extends Facility{
    @Index
    private String url;
    private void SportFacility(){}
    public SportFacility(String name, double x_coordinate, double y_coordinate, String address, String url) {
        super(name, x_coordinate, y_coordinate, address);
        this.url = url;
    }
}

@EntitySubclass(index=true)
public class UserDefinedFacility extends Facility{
    @Index
    private String url;
    private void UserDefinedFacility(){}
    public UserDefinedFacility(String name, double x_coordinate, double y_coordinate, String address) {
        super(name, x_coordinate, y_coordinate, address);
    }
}

基本上我的问题与 Objectify 4.0 中的实体层次结构中所述相同,但就我而言,查询

Facility facility = ofy().load().type(Facility.class).id(id);

不起作用,因为AndroidStudio抱怨类型应该是

LoadResult<Facility> 

而不是设施。

由于继承概念的语法似乎在 Objectify 版本之间经常更改,因此我找不到有效的解决方案,因此我非常感谢任何帮助!

提前致谢

塞缪尔

Android Studio 是正确的;要获取实体本身,您需要:

Facility facility = ofy().load().type(Facility.class).id(id).now();

Facility facility = ofy().load().type(Facility.class).id(id).safe();

如果实体不存在,后者将抛出NotFoundException(现在将返回null我记得)。

最新更新