@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>();
私はこれを Entity に設定していLocation
ます。
私のアプリケーションでは、AJAX を使用して新しいセットを構築します。これで問題は発生しませんでした。スケジュールの値を変更したり、値を追加したりできます。しかし、私はそれを削除することはできません。データベースとセットに残ります。
私は DAO で次のメソッドを使用します。
public Facility saveOrUpdate(Facility facility){
sessionFactory.getCurrentSession().saveOrUpdate(facility);
return facility;
}
だから私はログにこれを取得しています:
2013-08-06 17:44:43,444 [1219450701@qtp-169872652-2] DEBUG com.firstbankpr.os.common.data.dao.hibernate.FacilityHibernateDAO - Obtaining Session
2013-08-06 17:44:43,450 [1219450701@qtp-169872652-2] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 515, SQLState: 23000
2013-08-06 17:44:43,450 [1219450701@qtp-169872652-2] ERROR org.hibernate.util.JDBCExceptionReporter - Cannot insert the value NULL into column 'FacilityId', table 'OLS.dbo.Schedule'; column does not allow nulls. UPDATE fails.
注釈を入力nullable = false
すると、エラーはなくなります。joinColumn
しかし、削除したいスケジュールが正しく削除されません。
それで、私は何を間違っていますか?私はたくさんのグーグルをしました。3.6.7 を使用しているため、Hibernate 3.5に該当しないバグが見つかりました。hashcode と equals を正しく実装する必要があることがわかり、JPA と Hibernate のアノテーションがしばしば衝突することがわかりました。また、双方向のリレーションにはカスケードの問題があることもわかりましたが、これも私には当てはまりません。しかし、これらすべての検索を除けば、この問題の解決策はまったく見つかりませんでした。または、おそらく私は何かを見落としています。
私を助けてください、そしてありがとう!