如何为包含关键字段的子实体创建唯一ID?

时间:2010-09-07 08:25:40

标签: java google-app-engine

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

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

目前,我在为BlogPost <实例化blogTitle时将createKey Key(不保证唯一)传递给BlogPost方法/ p>

但我不知道如何为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);
    }
}

1 个答案:

答案 0 :(得分:2)

您仍然可以使用自动生成的密钥;用这个:

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

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