存储实体的Id生成(App引擎)

时间:2012-04-18 06:58:02

标签: java google-app-engine jdo

如果我有一个像这样定义的实体存储在App引擎的Big Table中:

@Entity
@Table(name = "users")
public class User implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id; 
    private String username; 
    private String password;
    private String encryptedPassword;
    private String creationDate;
    private String modificationDate;
    private Boolean validated;

        // Code omitted
}

如果我有另一个具有另一个表注释的实体,@Table(name = "profile")将使每个实体Id彼此独立。例如,有一个User实体,其id为0,Profile实体的id为0.

我的意思是,由于实体存储在“大表”中,因此将为存储的所有实体分配顺序Id。添加这样的注释是否解决了实体具有独立的id's序列的问题?

我想要实现的是每个实体都有自己的Id从0到n开始,每个实体类型都有自己的序列,例如:用户实体将从零开始依次为Long类型,而Profile实体也将以0开头。

2 个答案:

答案 0 :(得分:0)

是的,无论您拥有多少实体,自动生成的id或序列始终是独立的,如果您将数据类型设置为bigint,则必须在数据库中手动创建序列但是如果您使用它作为一个bigserial,而不需要在该服务器的db服务器中显式地生成序列。享受.........

答案 1 :(得分:0)

不,所有种类都有自己的ID序列,可能会重叠。您可以使用allocate_ids API来分配唯一ID,但请注意,这仍然不允许您在不知道其类型的情况下查询实体(我认为这是您要执行此操作的原因),因为您必须查询每个ID善待找到包含你身份证的那个。