java - 如何为包含Key字段的子实体创建唯一ID?

标签 java google-app-engine

在下面的演示代码中,User 是父实体,与 BlogPost 具有一对多关系。

由于 BlogPostUser 的子级,因此其主键字段不能是自动生成的 long 值,而必须是使用 KeyFactory 实例化的 Key 对象。

目前,在实例化 Key 时,我将 BlogPost blogTitle (不保证唯一)传递给 createKey 方法 用于 BlogPost

但我不知道如何为 BlogPost 生成唯一的 ID 值?

@Entity
public class BlogPost {

    @Id
    private Key key;
    private String blogTitle;
    private Text blogText;

    @ManyToOne(fetch = FetchType.LAZY)
    private User user;

    public BlogPost(Key parentKey, String blogTitle) {
      this.key = KeyFactory.createKey(parentKey, "BlogPost", blogTitle);
    }
}

@Entity
public class User {

    @Id
    private Key key;
    private String username;
    private String email;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<BlogPost> blogPosts;

    public User(String username){
      this.key = KeyFactory.createKey("User", username);
    }
}

最佳答案

您仍然可以使用自动生成的 key ;只需使用这个:

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;

以这种方式生成的 ID 对于给定的父实体来说是唯一的,因此为了唯一地标识帖子,您需要 User 对象的 ID 或名称,以及 BlogPost 的 ID。

关于java - 如何为包含Key字段的子实体创建唯一ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3656973/

相关文章:

java - android中如何解析json字符串

java - Tomcat 监控 - connectionCount JMX mbean

java - GAE fetchAsync - 有什么意义?

google-app-engine - 是否应该使用谷歌云应用引擎或计算引擎或容器引擎进行大型 Drupal 网站迁移?

java - BigDecimal 在 soap 消息中有科学记数法

java - 按整数排序列表

Java - 找不到符号类并发

java - Google AppEngine TaskQueue 抛出由 : java. lang.IllegalArgumentException 引起的:无效 URL:null

python - GAE HTTP 方法支持

python - Reportlab 不在 Google App Engine 上的 Django 应用程序中生成图表