0

Book と Chapter の間には 1 対多の関係があります。ブック オブジェクトを作成し、それに章を正常に追加できます (データストアを調べて、自分の作成を確認します)。ただし、章をループしようとすると本をフェッチした後、エラーが発生します

javax.jdo.JDODetachedFieldAccessException: You have just attempted to access field
"chapters" yet this field was not detached when you detached the object. Either dont
access this field, or detach it when detaching the object.

多くの調査の後、私は最終的に@Basic方法にちょうど場所を言うブログを見つけましたgetChapters. これを行うと、次の新しいエラーが発生します。

java.lang.IllegalStateException: Field "Book.chapters" contains a persistable object
that isnt persistent, but the field doesnt allow cascade-persist!

いろいろ試してみた結果、最新のモデルの見た目は

@Entity
public class Account {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key key;

    @OneToMany(mappedBy = "book", cascade = CascadeType.ALL)
    private List<Chapter> chapters = new ArrayList<Chapter>();
}


@Entity
public class Chapter {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key key;

    @ManyToOne(fetch = FetchType.EAGER)//already tried without annotation and with FetchType.LAZY
    private Book book;
}
4

1 に答える 1

0

Chapterエンティティで操作を実行するときにJPAが何をすべきかを理解できるように、 Book 属性でカスケード型を宣言する必要があります。

@Entity
public class Chapter {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key key;

    @ManyToOne(cascade = CascadeType.ALL) // you can also add fetch type if needed
    private Book book;
}

すべてのカスケード タイプの説明は次のとおりです

于 2013-12-25T12:02:30.207 に答える