在下面的演示代码中,User
是父实体,与BlogPost
具有一对多关系。
因为BlogPost
是User
的子级,所以它的主键字段不能是自动生成的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/