@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 中使用了这个方法: private SessionFactory sessionFactory;
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
错误消失。但它仍然没有正确删除我要删除的计划。
那么我做错了什么?我做了很多谷歌搜索。在 Hibernate 3.5中发现不适用于我的错误,因为我使用的是 3.6.7。发现 hashcode 和 equals 必须正确实现,发现 JPA 和 Hibernate 注解经常相互冲突。我还发现双向关系在级联方面存在问题,但同样不适用于我。但除了所有这些搜索之外,我还没有找到解决方案。或者也许我忽略了一些东西。
请帮帮我,谢谢!