我有一個包含另一個類的列表的Java類。Hibernate註釋級聯問題
@Entity public class Country {
private Long id;
private List<Hotel> hotels;
public void setId(Long id) {
this.id = id;
}
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="COUNTRY_SEQ")
@SequenceGenerator(name="COUNTRY_SEQ", sequenceName="COUNTRY_SEQ", allocationSize=1)
public Long getId() {
return id;
}
public void setHotels(List<Hotel> hotels) {
this.hotels = hotels;
}
@OneToMany
@JoinTable(
name="COUNTRY_HOTELS",
[email protected](name="COUNTRY_ID"),
[email protected](name="HOTEL_ID")
)
public List<Hotel> getHotels() {
return hotels;
}
}
當我嘗試刪除一個國家,我得到「ORA-02292:完整性約束(HOT.fk1a1e72aaf2b226a)違反 - 子記錄發現」,因爲它不能刪除一個國家時,其子女(=酒店)仍然存在。
但是,它是這樣想的!我不想在刪除國家時刪除我的酒店。
我試過沒有 any @ Cascade-annotation但失敗了。我也嘗試過SAVE_UPDATE,但仍然失敗。 所以它@級聯註解,我需要(或有另一種解決方案?):
- PERSIST
- MERGE
- REMOVE
- REFRESH
- DELETE
- SAVE_UPDATE
- REPLICATE
- DELETE_ORPHAN
- LOCK
- EVICT
巴特
好吧,我知道你(和justYo)在說什麼,但這裏是另一個問題: 我們所有的行動都在被標記爲@Transactional方法來完成。 – sennzz
我最後的意見是不完整的:這裏的全文: 我們所有的行動都在被標記爲@Transactional方法來完成,這意味着所有的報表(套酒店列表來nuull,保存,刪除),之後將被執行該方法已完成。所以,它仍然會拋出同樣的錯誤。 – sennzz
嘗試檢查由Hibernate生成的SQL查詢,並查看連接表上的刪除是否出現在國家/地區表的刪除之前。不要將列表設置爲空,清除它,並且只有在刪除酒店後。如果仍然不起作用,請嘗試在呼叫清除之後和刪除呼叫之前清空會話。 –