@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "FacilityId", referencedColumnName = "Id")
@ForeignKey(name = "FK_Schedule_Facility")
@Cascade(value = {org.hibernate.annotations.CascadeType.ALL})
@OrderBy("fromDay asc")
private Set<Schedule> schedules = new HashSet<Schedule>();
我在實體Location
中設置了此集。休眠3.6.7 orphanRemoval級聯單向
在我的應用程序中,我使用AJAX構建了一個新集。這並沒有給我任何問題。我可以更改計劃中的值,甚至可以添加更多。但我不能刪除一個。它停留在數據庫和集合中。
我在我的DAO中使用這個方法: private SessionFactory sessionFactory;
public Facility saveOrUpdate(Facility facility){
sessionFactory.getCurrentSession().saveOrUpdate(facility);
return facility;
}
所以我在日誌中得到這樣的:
2013-08-06 17:44:43,444 [[email protected]] DEBUG com.firstbankpr.os.common.data.dao.hibernate.FacilityHibernateDAO - Obtaining Session
2013-08-06 17:44:43,450 [[email protected]] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 515, SQLState: 23000
2013-08-06 17:44:43,450 [[email protected]] ERROR org.hibernate.util.JDBCExceptionReporter - Cannot insert the value NULL into column 'FacilityId', table 'OLS.dbo.Schedule'; column does not allow nulls. UPDATE fails.
在joinColumn
註釋進入nullable = false
後,錯誤消失。但它仍然不能正確刪除我想要刪除的計劃。
那麼我做錯了什麼?我做了大量的搜索。 Found bugs in Hibernate 3.5哪些因爲我使用3.6.7而不適用於我。 Found that hashcode and equals have to be implemented correctly and found that JPA and Hibernate annotations often clash with each other。我還發現雙向關係在級聯方面存在問題,但它又不適用於我。但除了所有這些搜索之外,我還沒有找到一個解決方案。或者我可能忽視了一些東西。
請幫助我,謝謝!
它不,它是單向的,因爲它在標題中說 – Nimchip
似乎有一些建議你需要調用'merge()'而不是'saveOrUpdate()'。這對我來說沒有意義,但它值得一試。另外,你可以嘗試刪除'@ Cascade'註釋,當你在'@ OneToMany'中使用cascade元素時沒有意義。最後,你確定你在事務提交後檢查刪除嗎? – Pace
試試這個:刪除'@ OneToMany'註釋中的「cascade」屬性,並保留'@ Cascade'一個。此外,OrphanRemoval是關於刪除父母時刪除孩子,這不是你想要做的。 – MaVVamaldo