2

次のようなエンティティがあります。

@Entity
public class Directory extends Node
{
   @OneToMany(cascade= CascadeType.ALL,fetch= FetchType.EAGER)
   private List<Node> nodes = new ArrayList<Node>();
}

マッピングは単方向です。

FethType.EAGER を使用すると、カスケード オプションが無効になります。このコードは、熱心なオプションがない場合、両方のエンティティを正常に保存します。ここで何が問題なのですか?

public void addDirectory(String name, long directoryId, User owner)
{
    Directory parent = entityManager.find(Directory.class, directoryId);
    Directory dir = new Directory(name,owner);
    parent.add(dir);
    owner.incrementRevision();
    entityManager.merge(owner);
}

parent.add() はエンティティをコレクションに追加するだけです。

public boolean add(Node e)
{
    return nodes.add(e);
}
4

1 に答える 1

0

Nodes.add の代わりに getNodes().add を使用する必要があるかもしれません。一部のプロバイダーは、エンティティーの処理にウィービングを使用している場合、これで問題が発生する可能性があります。

于 2012-09-08T05:28:18.827 に答える