在下面的演示代码中,User
是父实体,与BlogPost
具有一对多的关系。
由于BlogPost
是User
的子项,因此其主键字段不能是自动生成的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);
}
}
答案 0 :(得分:2)
您仍然可以使用自动生成的密钥;用这个:
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
以这种方式生成的ID对于给定的父实体将是唯一的,因此要唯一地标识帖子,您需要User对象的ID或名称以及BlogPost的ID。