我有以下休眠的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如果你仍然有這些錯誤,你能分享一些你使用的代碼嗎? –