なぜなら、すべてのエンティティを取得するためにflush()を呼び出すと、メモリからデータベースに永続化されます。そのため、不必要なflush()を過度に呼び出すと、時間がかかる可能性があるため、パフォーマンスの選択には適していません。ここに、flush()を呼び出すタイミングがわからないシナリオがありますか?
//Order and Item have Bidirectional Relationships
Order ord = New ord("my first order");
Item item = New Item("tv",10);
//...process item and ord object
em.persist(ord);//em is an instance of EntityManager
em.flush();// No.1 flush()
item.setOrder(ord);
em.persist(item);
Set<Item> items= new HashSet<Item>();
items.add(item);
ord.setItems(items);
em.flush();// No.2 flush()
私の質問は、No.1フラッシュの呼び出しを回避できるかどうかです。
私が心配しているのは、item.setOrder(ord)を実行するために、ordのデータベースIDが必要です。また、em.persist(ord)だけを呼び出してもデータベースIDを生成できないため、item.setOrder(ord)の前にem.flush()を呼び出す必要があります。だからあなたの意見の人は何ですか?
前もって感謝します。
最初に構造を作成し、その後すべてを永続化する必要があります。
Order ord = New ord("my first order");
Item item = New Item("tv",10);
item.setOrder(ord);
Set<Item> items= new HashSet<Item>();
items.add(item);
ord.setItems(items);
em.persist(ord);
このようにして、ツリー全体を1回の呼び出しで永続化し、フラッシュは不要です。
優れたオブジェクト設計では、duffymoで説明した方法を使用してオブジェクトをワイヤリングする必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加