Objectify - 我应该创建一个实体超类吗?

时间:2015-06-15 21:06:57

标签: java google-app-engine objectify

为什么我的所有实体都不应该是一个通用ModelEntity对象的子类?

@Entity
public class ModelEntity {
    @Id Long id;
}

@Subclass
public class User extends ModelEntity {
    @Index
    String username;
}

优点很明显:所有实体都有共同的代码(如id,date,getKey) 你能想到劣势吗?

2 个答案:

答案 0 :(得分:1)

拥有一个公共基类可能会有所帮助,但您几乎肯定不希望它成为多态实体层次结构的一部分。不要将@Subclass用于此目的;你不需要它:

public class ModelEntity {
    @Id Long id;
}

@Entity
public class User extends ModelEntity {
    @Index
    String username;
}

答案 1 :(得分:0)

嗯,jpa抽象的一大优势是在持久层和业务逻辑之间保持绝缘。如果您为所有实体使用隐藏ID,那么您就放弃了。

例如,您可以在实现中使用值对象,以便实际隐藏实体的@Id部分。你可以使用一个完全不同的@Id用于"真实"实体。