我一直在为一个问题苦苦挣扎,我想我只是还不完全了解 GAE Datastore 是如何工作的。
我有以下实体(我删除了问题不需要的代码)
@Entity
public class Post{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long Id;
//info
private String title;
//comments
@OneToMany(fetch = FetchType.LAZY,mappedBy = "post")
private List<Comment> comments;
//getter and setters...
}
以及以下实体:
@Entity
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
@ManyToOne(fetch = FetchType.LAZY)
private Vibe vibe; // vibe id
//getters and setters...
}
到目前为止一切都很好..我正在使用端点,并且我已经有几个可以正常工作的功能,如果我想添加新帖子或在帖子上发布新评论,我只有在我想获取列表时才会遇到问题特定帖子的所有评论 - 如访问 Post.getComments();
我正在使用 fetch = FetchType.LAZY 因为在某些情况下,我只想获取我的数据库中的所有帖子而没有评论,例如在某种索引中显示它们。
例如,当我尝试这个时:
@ApiMethod(name = "getPostComments")
public List<Comment> getPostComments(@Named("postId") Long postId) {
EntityManager mgr = getEntityManager();
List<Comment> results = new ArrayList<Comment>();
try {
Post p = mgr.find(Post.class, postId);
if (p == null) {
throw new EntityNotFoundException("Post does not exist");
} else {
results = p.getComments();
}
} finally {
mgr.close();
}
return results;
}
java.lang.IllegalArgumentException 我收到错误的请求错误 400
我尝试了各种不同的方法,但没有运气,我发现的所有解决方案都说我应该使用 fetch = FetchType.EAGER,这是我不想要的,老实说,它看起来好像 LAZY 类型没用。所以很明显我错过了一些东西!请帮忙!如果您可以编写一个获取列表的示例,那就太好了!