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

因为BlogPostUser的子级,所以它的主键字段不能是自动生成的long值,而必须是用Key实例化的KeyFactory对象。

目前,我为BlogPost实例化blogTitle时将createKey Key(不保证唯一)传递给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);
    }
}

最佳答案

您仍然可以使用自动生成的密钥;只需使用此:

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


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

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

10-13 04:26