【问题标题】:Id generation for stored entities (App engine)存储实体的 ID 生成(App 引擎)
【发布时间】:2012-04-18 06:58:02
【问题描述】:

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

@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 相互独立。例如,有一个 ID 为 0 的 User 实体和一个 ID 为 0 的 Profile 实体。

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

我想要完成的是每个实体都有自己的 ID,从 0 到 n,每个实体类型都有自己的序列,例如用户实体将从零开始依次为 Long 类型,与 Profile 实体相同也是从 0 开始。

【问题讨论】:

    标签: java google-app-engine jdo


    【解决方案1】:

    不,所有种类都有自己的 ID 序列,可能会重叠。您可以使用 allocate_ids API 来分配唯一 ID,但请注意,这仍然不允许您在不知道实体类型的情况下查询实体(我想这就是您要这样做的原因),因为您必须查询每个请找到包含您 ID 的那个。

    【讨论】:

    • 你是什么意思“可能重叠”,你的意思是每个实体类型的ID可能重叠,还是每个实体都有独立于其他实体类型的ID序列?
    • @xybrek 我的意思是你可以有一个 ID 为 1 的用户和一个 ID 为 1 的配置文件。
    【解决方案2】:

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

    【讨论】:

    • 我忘了定义我使用app engine来存储数据,在它的Big table上,你的答案还适用于app engine吗?
    • 对不起,不知道 appengine 但这是确认序列将是独立的。
    • 我刚刚通过代码单元测试确认每种类型的实体都有自己的自动生成 id 序列,以 1 开头
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2013-03-02
    相关资源
    最近更新 更多