我有一個實體類,其中每個實例可以具有相同類型的父級。Java JpaRepository @Query加入自己的表
現在我想能夠刪除父對象,並在該過程中刪除它的所有子對象。我無法通過級聯類型來完成,因此我在我的JPA存儲庫中進行了自定義查詢。不幸的是,這個bean無法創建,因爲自定義查詢有某種錯誤。
實體類
@Entity
@Transactional
@Table(name = "bericht")
@Proxy(lazy = false)
@Embeddable
public class Bericht implements Serializable {
@Id
@GeneratedValue
private Integer id;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.DETACH)
@JoinColumn(name = "PARENT_ID")
private Bericht parent;
}
庫接口
@Transactional
public interface BerichtRepository extends JpaRepository<Bericht, Integer> {
@Query("SELECT b1 FROM Bericht b join Bericht b1 WHERE b1.parent.id <> NULL AND b1.parent.id = b.id AND b.id = ?1 order by b1.id desc")
public List<Bericht> getChildrenVanBericht(Integer id);
public default void deleteBericht(Integer id) {
List<Bericht> kinderen = getChildrenVanBericht(id);
for(Bericht kind:kinderen) {
if(getChildrenVanBericht(kind.getId()).size()==0) {
this.delete(kind);
} else {
deleteBericht(kind.getId());
}
}
}
}
正如所看到的我要開始從票數的底部刪除Archy通過deleteBericht
方法,並在層次結構中向上工作。
有沒有比上面顯示的deleteBericht
方法更好的解決方案?
您是否只有兩級層次結構(父級及其子級)或層級結構可以是多級(父級,子級,孫輩等)?如果是多層次的,應該刪除級聯到被刪除節點下的整個樹或者它的直接子節點(如果只是直接子節點,那麼孫子們應該怎麼辦?)?父母是否可以有多個孩子(如果是,您的父母 - 孩子映射被錯誤地聲明爲「@ OneToOne」而不是「@ ManyToOne」)? – manish