【问题标题】:How you retrieve the Key<T> when you have an Entity?拥有实体时如何检索 Key<T>?
【发布时间】:2014-08-09 00:56:25
【问题描述】:

我有一个使用 Objectify v5 加载的类,如何从 Objectify 获取关联的Key&lt;T&gt;

@Entity
@Cache
public abstract class BaseEntity<T,P>
{
    @Parent
    private Key<P> parent;

    @Id
    private String uuid;
}

我知道ofy().save() 返回Key&lt;T&gt;,但我想从由过滤器或ID 加载的Entity 中获取Key&lt;T&gt;

我搜索了整个 Objectify v5 文档,但找不到采用 Entity 并返回该实体的 Key&lt;T&gt; 的方法。

【问题讨论】:

    标签: objectify google-app-engine


    【解决方案1】:

    解决方案

    Key.create(T pojo);
    

    但在上述情况下,它在我的 BaseEntity&lt;T,P&gt; 类中不起作用。

    @Nonnull
    public Key<T> getKey() { return Key.create(this); }
    

    抱怨它想将结果转换为Key&lt;T&gt;

    经过一些试验,我刚刚在BaseEntity 中添加了一个方法

    @Nonnull
    public Key<T> getKey() 
    { 
        return Key.create(this.parent, this.entityType, this.uuid.toString()); 
    }
    

    这将返回自动生成的相同 Key&lt;T&gt;

    【讨论】:

    • 你能提供一个你想要做什么的例子吗?这听起来像是一个 Java 泛型问题。您可能需要强制转换 create 函数,例如Key.&lt;SomeType&gt;create(...).
    【解决方案2】:

    Java 的类型系统不够复杂,无法表达“我希望 this 成为叶级别的任何类型”(因为您在抽象类中)。 Scala 可以做到这一点,但 Java 不行。至少据我所知不是。

    除非我误解了你想要做什么......?

    【讨论】:

    • 啊,我明白你现在想做什么了。您是否在代表它的具体类上键入基类 - 通过 T 。 MyEntity 扩展 Base?另外,#entityType 是否是一个返回 T 的方法,并且您必须在子类中重写才能返回 this.getClass()?谢谢。
    猜你喜欢
    • 2010-11-27
    • 2013-05-25
    • 2012-09-29
    • 2018-06-22
    • 1970-01-01
    • 2015-11-13
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多