我有以下休眠的entites:休眠设置外键为空时删除实体
@Entity
@Table(name = "model_view")
public class ModelView {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "modelView_id")
private Integer id;
@ManyToOne
@NotNull
@JoinColumn(name = "page_id", nullable = false, insertable = true, updatable = true)
private Page page;
/* getters and setters */
}
和:
@Entity
public class Page {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "page_id")
private Integer id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "page_id")
@IndexColumn(name = "modelView_id")
private Set<ModelView> modelViews = new HashSet<ModelView>();
/* getters and setters */
}
当我在DAO删除实体«模型视图»我有例外:
ORA-01407: unable to replace ("MODEL_VIEW"."PAGE_ID") to NULL
有什么不对?为什么hibernate在删除之前将外键设置为NULL?
这不是我的解决方案,因为在这种情况下,我对插入实体«模型视图»同样的错误(ORA-01400:无法插入NULL来(“MODEL_VIEW”“PAGE_ID”)。)。我尝试设置FK为空,但不是个好主意。还有其他解决方案吗? – AnEi
这个建议的解决方案_should_也应该用INSERT语句来解决这个问题。当您将'insertable'和'updatable'设置为'false'时,您告诉Hibernate您将手动保存对'ModelView'记录的修改。这意味着你需要首先插入/更新'Page'记录,然后在'ModelView'上设置FK,然后独立保存这些记录,最好是所有事务。如果你这样做,你永远不应该有一个FK为NULL的情况。 –
@AnEi如果你仍然有这些错误,你能分享一些你使用的代码吗? –