3

親テーブルの行を削除しようとしていて、それが子テーブルの行にカスケード (削除) されるかどうかを監視しています。Java アノテーションを持つ親と子のテーブル エンティティは次のとおりです。

//Table details
@Entity
@Table(name="PARENT_TABLE")
//Mandatory Column details
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="PARENT_TABLE_ID")
private Integer id;
.
.
.
@OneToMany(cascade={CascadeType.ALL}, mappedBy = "parentTable")
private Set<ChildTable> setChildTable;
//Child table entity details:
@Entity
@Table(name = "CHILD_TABLE")
//Column details
@Id
@Column(name = "PARENT_TABLE_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
.
.
private ParentTable parentTable;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "PARENT_TABLE_ID")
public ParentTable getPatentTable() {
   return parentTable;
}

 //QueryDSL to Delete child table row, looks like this:
HibernateDeleteClause query = new HibernateDeleteClause(getSession(),QChildTable.childTable);
Path<?> idPath = QChildTable.childTable;
 query.where(((NumberPath<?>)idPath).in((Number[]) ids)).execute();
 //QueryDSL to Delete parent table rows, looks like this:
HibernateDeleteClause query = new HibernateDeleteClause(getSession(),QParentTable.parentTable);
Path<?> idPath = QParentTable.parentTable;
 query.where(((NumberPath<?>)idPath).in((Number[]) ids)).execute();

子を削除してから親テーブルの行を削除しようとすると、正常に機能します。挿入が機能する方法で、一度に親テーブルと子テーブルの行をすべて削除するためのヘルプを探しています。データを割り当てて ParentTable オブジェクトを作成して挿入するのと同様に、親テーブルと子テーブルの行の両方を挿入します。助けてくれてありがとう。

4

2 に答える 2

1

残念ながら、JPQL の DELETE 句は関連するエンティティにカスケードしないため、API を使用して削除または更新をカスケードする必要があります。

A delete operation only applies to entities of the specified class and its subclasses. 
It does not cascade to related entities.
于 2013-04-09T06:38:59.043 に答える