0

私はかなり長い間問題に取り組んできましたが、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 を使用する必要があると言っていました。明らかに私は何かが欠けています!助けてください!リストを取得するための例を書くことができれば、それは素晴らしいことです!

4

1 に答える 1