2

親/子の自己結合エンティティを削除しようとしていますが、削除できません。ここに私のマッピングがあります

@Entity
public class FolderNode  {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "hibernate_sequence")
    @SequenceGenerator(name = "hibernate_sequence", sequenceName = "hibernate_sequence")
    @Column(name="folder_id")
    private long folderId;

    
    @ManyToOne
    @Cascade(CascadeType.DELETE)
    @JoinColumn(name="parent_id")
    @OnDelete(action = org.hibernate.annotations.OnDeleteAction.CASCADE)
    private FolderNode parent;

}
4

2 に答える 2

2

正しい親子関係モデリングのために、関係の 1 対多の部分をモデル化する必要があります。例を見つけてください。

    @ManyToOne(cascade={CascadeType.ALL})
    @JoinColumn(name="parent_id")
    private Menu parent;
    @OneToMany(mappedBy="parent",orphanRemoval=true)
    private List<Menu> children = new ArrayList<Menu>();

これは単方向リンクであるため、リレーションの所有者はリレーションの親側になります。EM.delete(parent)またはを発行するsession.delete(parent)delete、チェーンによってカスケードされ、子も削除されます (通常は orphans と呼ばれます。デフォルトでは、hibernate は orphans で削除ステートメントを発行しません)。そのため、orphanRemoval = trueが構成されます。

于 2013-04-10T13:09:59.353 に答える